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
函数中添加了一个属性,它现在似乎可以工作了!我更新了我的答案以显示另一种可能性。这项工作有很多选择。