Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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 主干-复选框保持选中状态?_Javascript_Jquery_Dom_Backbone.js_Dom Events - Fatal编程技术网

Javascript 主干-复选框保持选中状态?

Javascript 主干-复选框保持选中状态?,javascript,jquery,dom,backbone.js,dom-events,Javascript,Jquery,Dom,Backbone.js,Dom Events,我试图将一个复选框连接到我的视图,但只要我勾选它,它就会保持选中状态,即使我再次单击它 以下是部分视图: views.PaginatedView = Backbone.View.extend({ events: { 'click input.completedEnquiries': 'filterCompletedEnquiries' }, filterCompletedEnquiries: function (e) { return e.

我试图将一个复选框连接到我的视图,但只要我勾选它,它就会保持选中状态,即使我再次单击它

以下是部分视图:

views.PaginatedView = Backbone.View.extend({
    events: {
        'click input.completedEnquiries': 'filterCompletedEnquiries'
    },
    filterCompletedEnquiries: function (e) {
        return e.currentTarget.checked;
    }
});
模板如下:

<label>Show Completed: <input type="checkbox" class="completedEnquiries" /></label>
显示已完成:
我不知道我做错了什么

编辑
这里是一个问题的Jsfiddle:

问题从事件处理程序返回
e.currentTarget.checked
。从该处理程序返回
true
false
将为您选中或取消选中该框


 filterCompletedEnquiries: function(e) {
        //return e.currentTarget.checked;
    },
注释掉返回语句,它就可以正常工作了。您仍然可以获取信息,但不要从方法返回任何内容


 filterCompletedEnquiries: function(e) {
        var isChecked = e.currentTarget.checked;
        // do stuff here, based on it being checked or not
    },
编辑 以下是一个基于评论中对话的示例:


views.PaginatedView = Backbone.View.extend({
    events: {
        'click input.completedEnquiries': 'completedEnquiriesClicked'
    },

    // this is explicitly an event handler, and that's all it should be used for
    completedEnquiriesClicked: function(e){
      this.showCompletedEnquiries = e.currentTarget.checked;
    },

    doSomething Else: function (e) {
        // now that we need to know, we can just check that attribute
        if (this.showCompletedEnquiries){
          // do something here
        }
    }
});

这只是您所拥有的众多选项之一,可以使其按您想要的方式工作。

问题是从事件处理程序返回
e.currentTarget.checked
。从该处理程序返回
true
false
将为您选中或取消选中该框


 filterCompletedEnquiries: function(e) {
        //return e.currentTarget.checked;
    },
注释掉返回语句,它就可以正常工作了。您仍然可以获取信息,但不要从方法返回任何内容


 filterCompletedEnquiries: function(e) {
        var isChecked = e.currentTarget.checked;
        // do stuff here, based on it being checked or not
    },
编辑 以下是一个基于评论中对话的示例:


views.PaginatedView = Backbone.View.extend({
    events: {
        'click input.completedEnquiries': 'completedEnquiriesClicked'
    },

    // this is explicitly an event handler, and that's all it should be used for
    completedEnquiriesClicked: function(e){
      this.showCompletedEnquiries = e.currentTarget.checked;
    },

    doSomething Else: function (e) {
        // now that we need to know, we can just check that attribute
        if (this.showCompletedEnquiries){
          // do something here
        }
    }
});

这只是众多选项中的一个,可以让这项工作按您所希望的方式进行。

由于一切看起来都很适合我,其他一些事情正在发生。你能在JSFIDLE中重现这个问题吗?因为我觉得一切都很好,所以发生了其他事情。你能在JSFIDLE中重现这个问题吗?但是我想根据它是否被选中来返回一个值,因为我将在另一个函数中使用该值。不要为此使用事件处理程序。这是个坏主意,你已经看到了。将数据存储在模型中并访问该模型中的数据,在另一种情况下,您可以将其存储在视图的属性中,或者创建不同的方法(而不是事件处理程序)来返回值。记住,它只是javascript。这是一个主干视图没有什么特别的。。。编写代码来保存变量或在需要时访问它。只是不要使用事件处理程序,因为您已经看到了导致问题的原因。谢谢!我在我的
initialize
函数中添加了一个属性,它现在似乎可以工作了!我更新了我的答案以显示另一种可能性。有很多选项可以让它工作。但是我想根据它是否被选中返回一个值,因为我将在另一个函数中使用该值。不要为此使用事件处理程序。这是个坏主意,你已经看到了。将数据存储在模型中并访问该模型中的数据,在另一种情况下,您可以将其存储在视图的属性中,或者创建不同的方法(而不是事件处理程序)来返回值。记住,它只是javascript。这是一个主干视图没有什么特别的。。。编写代码来保存变量或在需要时访问它。只是不要使用事件处理程序,因为您已经看到了导致问题的原因。谢谢!我在我的
initialize
函数中添加了一个属性,它现在似乎可以工作了!我更新了我的答案以显示另一种可能性。这项工作有很多选择。