我的一个表单有八组复选框。表单是使用AJAX和jQuery从数据库填充的。大多数复选框集都可以正确加载,但有四个复选框集无法正确加载。在每种情况下使用的代码似乎没有区别,经过几个小时的测试后,我找不到导致这四种情况失败的原因。
一个不同之处在于,失败的四个使用UUID作为值。当我将其中的值更改为数字时,代码可以正常工作。但是,其他两个复选框集也使用UUID,它们工作得很好。失败的四个有不同的和更复杂的格式,所以我删除了格式,但没有用。
这是所有复选框的格式。这个示例是从一个失败的复选框集复制的(总共有83个成员,但我将把完整的列表留给您):
<input id='interest1' name='interest[]' type='checkbox' value='74095951-F0EF-441C-85F4-949304FF6B89' />
<label for="interest1">Civil rights</label>
<input id='interest2' name='interest[]' type='checkbox' value='3D8A60AC-732F-4522-A9A7-7E564F16C5DA' />
<label for="interest2">Domestic violence</label>
这是设置所有复选框集的状态的jQuery代码,这些复选框集可以工作,而不能工作:
if($.isArray(value)){
for(var i = 0; i < value.length; i++){
$('input[type="checkbox"][name^="' + key + '"][value="' + value[i] + '"]').attr('checked', 'checked');
}
}
在每种情况下,value
都是一个简单的数组。
有没有人对我可以做的测试有什么想法来确定原因?
发布于 2019-04-24 10:46:10
问题解决了。
用于生成导致问题的四组复选框的查找表的UUID为大写。但是测试数据是小写的。
我很抱歉用这个来打扰这个列表。我感到非常尴尬。
我现在将所有的UUID转换为小写,因为我从https://stackoverflow.com/a/13833488/9428542中了解到这是标准。
发布于 2019-04-24 03:17:18
您可以简单地使用each
函数来迭代数组。没有必要在CSS选择器中引用属性值,正如注释中所提到的,您应该使用prop
来设置布尔属性,如checked
、disabled
等。
var key = 'interest';
var value = ['74095951-F0EF-441C-85F4-949304FF6B89', '3D8A60AC-732F-4522-A9A7-7E564F16C5DA'];
$.each(value, function(i, v) {
$('input[type=checkbox][name^=' + key + '][value=' + v + ']').prop('checked', true);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id='interest1' name='interest[]' type='checkbox' value='74095951-F0EF-441C-85F4-949304FF6B89' />
<label for="interest1">Civil rights</label>
<input id='interest2' name='interest[]' type='checkbox' value='3D8A60AC-732F-4522-A9A7-7E564F16C5DA' />
<label for="interest2">Domestic violence</label>
<input id='interest3' name='interest[]' type='checkbox' value='3D8A60AC-732F-4522-A9A7-7E564F16C5DB' />
<label for="interest3">Some other thing</label>
https://stackoverflow.com/questions/55817571
复制相似问题