2014-01-21 41 views
0

我有一个页面有两个复选框。例如Backbone.js手动点击复选框触发,但'代码点击'一个不

<label class="checkbox" for="1"> 
    <input id="1" type="checkbox"> 
     Option#1 
</label> 
<label class="checkbox" for="2"> 
    <input id="2" type="checkbox"> 
     Option#2 
</label> 

如果我手动单击浏览器复选框#1,选中该复选框(显然)和变化由骨干回升。

如果我在页面中有一个jQuery示例片段,例如由一个锚点触发,检查/选择代码中的框,它不会被Backbone拾取。在jQuery的我已经尝试了所有的以下内容:

$('#2').prop('checked', true, true); 
$('#2').attr('checked','checked'); 
$('#2').trigger("click"); 
$('#2').change(); 

的框出现在使用上述片段的一个浏览器检查,但只有骨干拿起人工检查框,而不是一个“代码”检查,即使他们都在一起完成。

我很欣赏任何加深我对Backbone事件的理解的答案!

回答

0

试过这样:

$('#2').prop('checked', true).trigger('change'); 
+0

谢谢...我试过,但没有奏效。 – AJay

0

编程改变复选框的选中状态似乎并没有引起相应的变化事件。这与Backbone无关,被认为是jQuery的正常行为。

因此,要总结:

$('#1').prop('checked', true); - 检查复选框

$('#1').change(); - 触发change事件为复选框

$('#1').prop('checked', true).change(); - 检查一个复选框,并触发change事件明确

我已经设置了一个说明你的例子的jsFiddle,查看here

+0

谢谢...我试过$('#1')。prop('checked',true).change();虽然该框由jQuery检查,但只有手动点击的复选框被Backbone拾取。 – AJay

+0

Backbone如何听取复选框的“更改”?你应该有类似于jsFiddle的东西(例如'events:{“change#1”:“checkboxChangeHandler}}) – Lucian

0

我在这方面花了太多时间。我面临的问题是我是听上的复选框单击事件:

events: { 
    'click .some-checkbox-class: function() {...} 
} 

我试过几个小时的编程方式检查此复选框在茉莉测试,才知道原来骨干从未把它捡起来。 (一切都在浏览器中工作时,我用它作为一个利益相关方会)

我改成了这一点,这有同样的效果相同,我能检查它在茉莉测试和骨干把它捡起来像它应该...

events: { 
    'change .some-checkbox-class: function() {...} 
} 

而在茉莉单元测试,我能得到这个威盛Fire:

view.$el.find('.some-checkbox-class').prop('checked', true).change();