【发布时间】:2015-10-28 08:43:35
【问题描述】:
我正在尝试找出用户单击复选框后是否不勾选。该复选框被包裹在一个标签中,该标签也必须是可点击的。我的 HTML 代码是:
<div id="view_container">a</div>
<script type="text/template" id="view_template">
<ul>
<li>
<label>
<input type="checkbox" checked="" value="a">A option
</label>
</li>
<li>
<label>
<input type="checkbox" value="b">B option
</label>
</li>
<li>
<label>
<input type="checkbox" value="c">C option
</label>
</li>
</ul>
</script>
回答 JavaScript:
View = Backbone.View.extend({
initialize: function() {
console.log('in the init');
this.render();
},
render: function() {
var template = _.template($("#view_template").html(), {});
this.el.html(template);
},
events: {
'click ul li label': 'clicked',
},
clicked: function(e) {
e.stopPropagation();
console.log('e.target is ' + e.target);
console.log('e.currentTarget is ' + e.currentTarget);
var isChecked = $(e.currentTarget).find('input:first').is(':checked');
var selected = $(e.currentTarget).find('input:first').val().trim();
console.log('isChecked is ' + isChecked);
},
});
var view = new View({
el: $("#view_container")
});
jsfiddle 是here。
有几个问题。如果我单击输入,它工作正常,isChecked 的值为 true。但是,如果我单击标签,函数clicked 会执行两次,console.log 输出为:
e.target is [object HTMLLabelElement]
e.currentTarget is [object HTMLLabelElement]
isChecked is false
e.target is [object HTMLInputElement]
e.currentTarget is [object HTMLLabelElement]
isChecked is true
所以isChecked 第一次是假的。
那么,无论用户是点击标签还是直接点击输入,我如何知道复选框是否被选中?当用户点击标签时,如何阻止处理程序执行两次?
【问题讨论】:
标签: javascript html backbone.js