2012-02-03 17 views
8
<li> 
<input type="checkbox" id="master" /> 
    <ul> 
    <li> 
    <input type="checkbox" /> 

$('input').bind('change', function() {}); // exists elsewhere, cannot change 

当我点击顶层输入,我想设置.prop('checked', true)其所有的孩子,但我想避免触发change事件为每个孩子复选框。

如何将.prop('checked', true)设置为输入而不触发change

编辑:(扩大)

$('#master').click(function() { 
    $(this).parent().find('input').each(function(n, in) { 
     $(in).prop('checked', true); // this triggers a change event that I need to stop 
    }); 
}); 

回答

19

你所描述的是默认功能。从javascript更改元素不会触发更改事件。

http://jsfiddle.net/8JsP4/

注意,如果您在点击在例如一个复选框,你会得到一个警告,但如果你按一下按钮,没有任何警报。

+0

我想重现我的症状,你必须使用一个上层复选框,检查所有的较低水平,而不是箱子一个单独的按钮 – tester 2012-02-03 21:58:17

+1

还没问题http://jsfiddle.net/8JsP4的/ 1 /也许你可以在我的小提琴中重现这个问题? – 2012-02-03 22:00:21

+0

挂上,只是看着你的编辑,你的代码不会做任何事情。 '$(this).find(...'将不会返回任何内容,因为'this'是一个不包含**任何内容的输入。你的html与你发布的内容实际上是不同的吗? – 2012-02-03 22:02:36

0

尝试取消绑定的onchange监听器,然后将其绑定再度财产已经设置。

1

现在,您的选择器会针对所有input元素。你可以给你的主复选框一个ID,其他人是一个普通的类。

<li> 
<input id="main-chk"type="checkbox" /> 
    <ul> 
    <li> 
    <input class="children" type="checkbox" /> 

    $('li:first').bind('change', function() { 
     $(this).find('li').prop('checked', 'checked'); 
    }); // exists elsewhere, cannot change 
+0

我需要这样做没有ids /类。只是基于ul/li /输入层次结构 – tester 2012-02-03 22:00:15

+0

更新了我的答案。 – Jack 2012-02-03 22:08:04