此代码在safari和chrome中完美执行,但Firefox存在问题。
基本上,我有一组单选按钮。 只有在单选按钮具有checked属性时才应触发此单击事件。但是出于某种原因,即使没有选中单选按钮,firefox中的单选按钮似乎也会触发事件。
var MyView = Backbone.View.extend({
events: {
'click input[type="radio"]:checked' : 'radioListener',
},
radioListener : function(evt) {
var selectedObject = evt.currentTarget;
$(selectedObject).prop('checked', false);
$(selectedObject).val('');
$(selectedObject).change(this.clearSelection(evt));
}
});
答案 0 :(得分:1)
您对事件绑定的工作方式有错误的了解。
当您将事件侦听器绑定到DOM元素时,您提供的jQuery选择器(在您的情况下为input[type="radio"]:checked
)用于在事件绑定期间指定DOM元素,而不是事件触发< / strong>(触发)。
这意味着在您的示例中click
事件会在所选单选按钮上触发,无论他们是否在点击时检查。
所以你必须在事件监听器中过滤你的单选按钮。像这样:
var MyView = Backbone.View.extend({
events: {
'click input[type="radio"]' : 'radioListener',
},
radioListener : function(evt) {
var selectedObject = evt.currentTarget;
if (selectedObject.is(':checked')) {
$(selectedObject).prop('checked', false);
$(selectedObject).val('');
$(selectedObject).change(this.clearSelection(evt));
}
}
});