在我的javascript文件中,代码是
$( document ).ready(function() {
$("input:checkbox[id^='chkbox_']").on('click',function(){
var chkbox = $(this);
if(chkbox.is(':checked')){
alert('In if');
} else {
alert('In else');
}
});
$("#" + id).trigger('click');
});
这个代码给了我In else
。
我不明白为什么以及这个的解决方案是什么
EDIT:这个答案似乎只适用于1.9之前的版本,当"bug"似乎已经修复时。
我也被这个问题所困扰。原因是,当您实际用鼠标单击复选框时,它的状态将首先设置,然后执行其单击处理程序。如果使用jQuery触发单击,则首先执行单击处理程序,然后设置状态。
一种解决方案是触发本地javascript点击处理程序,如下所示:checkbox[0].click()
,它的操作与jQuery的.click()
/.trigger('click')
相同,但顺序正确。
另一种是执行checkbox.attr('checked', true).triggerHandler('click')
,其中首先设置状态,triggerHandler()
只执行处理程序,而不执行默认行为(选中该框)。
这两种解决方案都应该允许您的代码工作,无论点击是真实的还是触发的。
这可能是您的jquery库问题。或浏览器问题。它对我来说运行良好。你可以看到1.8以上的最新jquery。
click to view answer
http://jsfiddle.net/dy4uzn51/2/