以下代码由for循环生成。
<form action="saveresponse.php" method="POST" name="mainForm">
<input class="cbox_yes" type="checkbox" name="yes[]" value="01.jpg"
onclick="spenable()" /> OK
<input class="cbox_sp" type="checkbox" name="sp[]" value="01.jpg" disabled />Special<br />
<input class="cbox_yes" type="checkbox" name="yes[]" value="02.jpg"
onclick="spenable()" /> OK
<input class="cbox_sp" type="checkbox" name="sp[]" value="02.jpg" disabled />Special<br />
etc etc upto n times...
现在,我想要的是,在页面加载时,只有当用户检查了相应的yes []复选框时,才应禁用和启用所有sp []复选框。
我正在使用的Javascript代码:(只是为了检查JS是否正在捕获yes []复选框的状态?
function spenable(){
var yes = document.mainForm.yes[].value;
if (yes == true)
//alert("true");
document.mainForm.yes[].value = checked;
else
//alert("false");
document.mainForm.yes[].value = checked;
};
};
但我没有得到任何警报(既不是,也不是)。
那么,是的[](方括号)在第二行是不正确的?或者我的if / else条件在JS中是错误的?
P.S。 SO或Google上的所有问题只涉及一个案例/对 附:如果需要,我可以将yes []改为yes1,yes2,yes3等对应的sp1,sp2,sp3,其中1,2,3是For循环的$ i,但那么我将如何在JS中捕获/引用它? BR />
_ 更新: _
流程/条件是(澄清):
最初将禁用“特殊”复选框,并且将取消选中“确定”复选框
然后,如果用户检查确定,则启用特殊功能
如果用户想要,他可以勾选特殊
如果以后用户改变思路并取消确定,则应取消特殊处理以及再次禁用。
答案 0 :(得分:4)
为了简单起见,我在这里使用了jQuery。
$("input[name='yes[]']").change(function() { //When checkbox changes
var checked = $(this).attr("checked");
$(this).next().attr("disabled", !checked); //The next checkbox will enable
}); // or disable based on the
// checkbox before it
演示: http://jsfiddle.net/DerekL/Zdf9d/
纯JavaScript: http://jsfiddle.net/DerekL/Zdf9d/1/
选中特殊复选框时,将取消选中第一个复选框 纯JavaScript: http://jsfiddle.net/DerekL/Zdf9d/2/
以下是演示:
纯JavaScript: http://jsfiddle.net/DerekL/Zdf9d/3/
jQuery: http://jsfiddle.net/DerekL/Zdf9d/4/
小记:document.querySelectorAll
适用于所有现代浏览器和IE8 +,包括IE8。如果你想支持IE6,最好使用jQuery。
答案 1 :(得分:2)
您不能在Javascript中使用yes[]
作为标识符,因此您必须使用名称作为字符串访问该字段:
document.mainForm["yes[]"]
这不会返回单个元素,它将返回一个元素数组。使用索引访问特定元素:
document.mainForm["yes[]"][0]
复选框的值始终为value
属性,无论是否选中该复选框。使用checked
属性查看是否已选中:
function spenable() {
var yes = document.mainForm["yes[]"][0].checked;
if (yes) {
alert("true");
} else {
alert("false");
};
}
要访问单击的特定复选框,请在事件调用中发送复选框的索引:
<input class="cbox_yes" type="checkbox" name="yes[]" value="01.jpg" onclick="spenable(0);" /> OK
使用函数中的索引:
function spenable(idx) {
var yes = document.mainForm["yes[]"][idx].checked;
var sp = document.mainForm["sp[]"][idx];
sp.disabled = !yes;
}
答案 2 :(得分:2)
如果您愿意使用jQuery:
$('input[type="checkbox"]').click(function(){
var obj = $(this);
obj.next('.cbox_sp').attr({'disabled':(obj.is(':checked') ? false : 'disabled')});
});
此解决方案将为所有复选框分配onclick
事件处理程序,然后检查是否应禁用相应的“特殊”复选框。它还将默认检查状态设置为true。