Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么单击复选框时“event.currentTarget.checked”不正确?_Javascript_Backbone.js_Checkbox - Fatal编程技术网

Javascript 为什么单击复选框时“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测试时,我们清楚地看到它是错误的 如果我们继续逐行运行调试器,一段时间

我们有一个主干程序,可以监听复选框。当用户单击复选框时,它将触发一个函数,但问题是event.currentTarget.checked不正确

例如,有一个模板包含一个复选框:

<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元素或该元素的父元素?