Javascript 为什么单击复选框时“event.currentTarget.checked”不正确?
我们有一个主干程序,可以监听复选框。当用户单击复选框时,它将触发一个函数,但问题是event.currentTarget.checked不正确 例如,有一个模板包含一个复选框:Javascript 为什么单击复选框时“event.currentTarget.checked”不正确?,javascript,backbone.js,checkbox,Javascript,Backbone.js,Checkbox,我们有一个主干程序,可以监听复选框。当用户单击复选框时,它将触发一个函数,但问题是event.currentTarget.checked不正确 例如,有一个模板包含一个复选框: <input type="checkbox" id="show_user" /> 因此,如果我单击复选框将其选中,我希望event.currentTarget.checked为true。但当我们在Chromewith调试器上运行karma测试时,我们清楚地看到它是错误的 如果我们继续逐行运行调试器,一段时间
<input type="checkbox" id="show_user" />
因此,如果我单击复选框将其选中,我希望event.currentTarget.checked为true。但当我们在Chromewith调试器上运行karma测试时,我们清楚地看到它是错误的
如果我们继续逐行运行调试器,一段时间后就会出现这种情况
为什么会有这样的行为??是否有其他稳定的方法来获取复选框的选中状态
更新:
我想我遗漏了一些重要的信息。当我说点击复选框时,我的意思是在jasmine测试中,我写:
$("#show_user").click()
var checkbox = $("#show_user");
checkbox.prop("checked", !checkbox.prop("checked"));
checkbox.change();
在这种情况下,方法切换中的事件参数接收得太早,复选框本身的状态尚未更改。如果我用很短的时间将其设置为setTimeout,请说:
toggle: function(event) {
setTimeout(function() {
this.model.set("show_user", event.currentTarget.checked);
}, 1);
}
event.currentTarget.checked将是正确的
现在我把它改成了:
在我的测试中,我不会使用。单击,我会写:
$("#show_user").click()
var checkbox = $("#show_user");
checkbox.prop("checked", !checkbox.prop("checked"));
checkbox.change();
更改复选框的状态并触发更改事件。现在它工作得很好 如果将事件从“单击”更改为“更改”,效果会更好吗?如果更改为“更改”,则在我运行$show_user时不会触发切换。单击?会为我触发更改,请选中FIDLE:可能重复:我在本地尝试了此完全相同的方案,并且当我执行event.currentTarget.checked时始终与复选框的选中状态匹配。换句话说,您在这里展示的代码是有效的,这表明您没有分享的其他代码也导致了问题。是否有可能将另一个事件处理程序绑定到同一show_user元素或该元素的父元素?