我将一个Array传递给一个函数,该函数应该在jQuery对话框中检查/取消选中一些复选框。
function preCheck(boolArray){
$("#cb0").attr("checked", boolArray[0]);
$("#cb1").attr("checked", boolArray[1]);
$("#cb2").attr("checked", boolArray[2]);
$("#cb3").attr("checked", boolArray[3]);
//etc.
$("#divform").dialog("open");
}
这些复选框放在divform中,该文件在document.ready函数中被显示为对话框。 boolArray中的值由我单击以打开对话框的按钮定义(导致根据单击的按钮检查不同的复选框)。
我的问题如下:第一次点击按钮时,相应地选中了boolArray复选框。如果我手动检查/取消选中某些>关闭对话框>按下相同的按钮打开对话框,复选框保持在我关闭对话框之前的状态,不再根据boolArray的值检查/取消选中。更令人沮丧的是,我取消选中并且应该检查的那个(根据boolArray中的布尔值)在HTML中显示为checked="checked"
,即使没有刻度线。任何帮助都会受到赞赏,我真的迷路了。
答案 0 :(得分:1)
您应该使用.prop()
instead of .attr()
。
来自jQuery文档:
根据W3C表单规范,checked属性是一个布尔属性,这意味着如果属性完全存在则相应的属性为true - 例如,即使属性没有值或设置为空字符串价值甚至是“假”。所有布尔属性都是如此。
您可能会看到这种行为:您已设置属性并正在更改其值;因为它是布尔值,它的存在意味着你的复选框被选中了。
试试这个:
function preCheck(boolArray){
$("#cb0").prop("checked", boolArray[0]);
$("#cb1").prop("checked", boolArray[1]);
$("#cb2").prop("checked", boolArray[2]);
$("#cb3").prop("checked", boolArray[3]);
//etc.
$("#divform").dialog("open");
}
答案 1 :(得分:1)
尝试使用.prop()。这是一个DEMO:http://jsfiddle.net/hxsRK/ 即使您更新阵列,这也将继续有效。
function preCheck(boolArray){
$("#cb0").prop("checked", boolArray[0]);
$("#cb1").prop("checked", boolArray[1]);
$("#cb2").prop("checked", boolArray[2]);
$("#cb3").prop("checked", boolArray[3]);
}
var checks = [true, false, true, true, false];
$('button').click(function(){
preCheck(checks);
});