【发布时间】:2015-03-22 04:51:18
【问题描述】:
当我手动选中/取消选中复选框时,
$('input[type=checkbox]').change(function(){}) 完美触发。
但是当我在代码中设置选中的属性时,这个事件处理程序没有被执行。
标记:
<li><input id="p-Client-Management" type="checkbox" name="selectedMenuItem" value="Client Management">Client Management</input>
<ul>
<li><input class="parent-p-Client-Management" type="checkbox" name="selectedMenuItem" value="Demo Client">Demo Client</input></li>
<li><input class="parent-p-Client-Management" type="checkbox" name="selectedMenuItem" value="Basic Clients">Basic Clients</input></li>
</ul>
</li>
**Event handler :**
$('input[type=checkbox]').change(function(){
var id = $(this).attr('id');
if(id){
console.log("parent found -> "+id);
var children = $('.parent-'+id);
console.log("children of "+id+" -> "+children.length);
for(var i = 0; i<children.length; i++){
children[i].checked = document.getElementById(id).checked;
}
}
else{
if(this.checked){
console.log("Child is checked");
var suffix = $(this).attr('class').split("-")[2];
document.getElementById('p-'+suffix).checked = true;
}
});
我有id 用于父复选框,class 用于子复选框。当父复选框被选中时,if 块将被执行,显示控制台输出 找到父对象。当子被选中时,else 块将被执行,显示控制台输出子被选中。我想要的是,在手动检查父母时,孩子的 else 块也将被执行,因为他们的检查属性是用父母设置的并提供输出孩子被检查
【问题讨论】:
-
这应该在页面加载时发生吗?如果是这样,请将您的代码包装在
$(function () { ... });中。您还必须将您的if (this.checked)函数移出您的输入更改范围。
标签: javascript jquery html checkbox