Backbone click事件在firefox中无法正常工作

时间:2015-01-30 19:30:37

标签: javascript firefox events backbone.js

此代码在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));
    }

 });

1 个答案:

答案 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));
        }
    }

});