2015-05-27 46 views
3

我有一个复选框ID为myopt,我有一个点击事件处理程序如下;Chekbox点击事件没有被触发检查

$("#globalBody").on("click", "#myopt", function (event) { 
    if ($(this).prop("checked")) { 
     // do something 
    } else { 
     // do something 
    } 
}); 

现在在我的代码,我做

$("#myopt").attr("checked",true); 

我的问题是不会触发上述点击事件处理程序。如果我手动点击复选框,它会被调用。

问题是什么?

回答

5

您需要使用.trigger()以编程调用单击处理

执行附着在特定的事件类型匹配的元素的所有处理程序和行为。

脚本

$("#myopt").prop("checked",true).trigger('click'); 

注:我会建议你使用change事件

$("#globalBody").on("change", "#myopt", function (event) { 
    if (this.checked) { 
     // do something 
    } else { 
     // do something 
    } 
}); 

//Change 
$("#myopt").prop("checked",true).trigger('change'); 
+3

使用变化而不是点击的任何理由? – testndtv

+0

@testndtv,通过http://stackoverflow.com/questions/11205957/jquery-difference-between-change-and-click-event-of-checkbox – Satpal

+0

哦,是的...和上面的代码实际上取消选中复选框! – testndtv

0

入住此琴,请https://jsfiddle.net/kwp7sjwf/2/

我有这取决于你两个版本需要。据我了解,你想要的是点击#globalBody内的某个地方,并检查myopt复选框的状态。在上面的小提琴中,我做到了这一点,但是我已经在评论中放置了一个代码块来处理第二个版本,在这种情况下,只有当myopt复选框状态发生变化(直接点击复选框)时才会收听。 希望它有帮助