当我在这里等待答案的时候,我也在寻找一个通用的解决方案来消除对象类型规范,例如:
chk.is(':checkbox')
或
chk.is(':radio')
在安静的搜索之后,我能找到的最好的方法是通过添加正则表达式来检查特殊字符来删除对象类型检查并保持其通用性
((*&&^<>>??""::
从
TESTINGfor123444((*&&^<>>??""::
在加载和设置数据函数的范围内声明和实例化regex exp:
var rgx = new RegExp(/[!@#$%^&*(),.?":{}|<>]/g); //indentifies all the special characters
所有的复选框/单选组
外观/消失和验证依赖
其他收音机/复选框
function SetField(dataArr, parentSelector, groupClassName) {
if (dataArr != "") {
for (var i = 0; i < dataArr.length; i++) {
var field = $(parentSelector).find('input.' + groupClassName + '[value="' + dataArr[i] + '"]');
if (!rgx.test(dataArr[i])) {
if (field.length > 0) {
field.prop('checked', true);
}
else {
$(parentSelector).find('input[value=Other]').not('input[type=text]').prop('checked', true);
$(parentSelector).find('input[type=text]').removeAttr('style').attr('validate', 'AddOrderAdditionalGroup').val(dataArr[i]);
}
}
else {
$(parentSelector).find('input[value=Other]').not('input[type=text]').prop('checked', true);
$(parentSelector).find('input[type=text]').removeAttr('style').attr('validate', 'AddOrderAdditionalGroup').val(dataArr[i]);
}
}
}
}
根据上述函数,在html中添加了一点更改,即父级
div/fieldset
在里面有一个输入类。
<fieldset class="responseGroup">
<input type="checkbox" class="ResponseCheckGroup" id="chk_1" value="1" />fortunate
<input type="checkbox" class="ResponseCheckGroup" id="chk_2" value="2" />Surprise
<input type="checkbox" class="ResponseCheckGroup" id="chk_3" value="3" />Whatever
<input type="checkbox" class="ResponseCheckGroup" id="chk_4" value="4" />OutofWords
<input type="checkbox" class="ResponseCheckGroup" id="chk_5" value="5" />Nevermind
<input type="checkbox" class="ResponseCheckGroup ResponseCheckGroupOther" id="chk_Other" value="Other" />Other<br>
<input type='text' id="txtOther" class="form-control" style="display: none;" require="please enter a value" />
</fieldset>
最后像这样调用函数:
SetField(["1","4","5","TESTINGfor123444((*&&^<>>??\"\"::"],'.responseGroup','ResponseCheckGroup')
但是,如果您碰巧在check/radio组的值中有特殊字符,那么您可以从regex中删除这些字符,以便将它们包含在检查中。
已编辑
根据我目前所面临的不同情况:
function SetField(data, parentSelector, groupClassName) {
if (data != null) {
if (typeof data === "object") {
if (data != "") {
for (var i = 0; i < data.length; i++) {
var field = $(parentSelector).find('input.' + groupClassName + '[value="' + data[i] + '"]');
if (!rgx.test(data[i])) {
if (field.length > 0) {
field.prop('checked', true);
}
else {
$(parentSelector).find('input[value=Other]').not('input[type=text]').prop('checked', true);
$(parentSelector).find('input[type=text]').removeAttr('style').attr('validate', 'AddOrderAdditionalGroup').val(data[i]);
}
}
else {
$(parentSelector).find('input[value=Other]').not('input[type=text]').prop('checked', true);
$(parentSelector).find('input[type=text]').removeAttr('style').attr('validate', 'AddOrderAdditionalGroup').val(data[i]);
}
}
}
}
else if (typeof data === "boolean") {
var field = $('input.' + groupClassName + '[value="' + data + '"]');
if (field.length > 0) {
field.prop('checked', true);
}
}
else if (typeof data === "string") {
if (data === "true" || data === "false") {
var field = $('input.' + groupClassName + '[value="' + data + '"]');
if (field.length > 0) {
field.prop('checked', true);
}
}
}
}
}