3

我想在每个页面的 mousedown 按钮上附加一个加载器。

我有一个函数在布局渲染并在顶层视图中传递后触发,然后抓住每个按钮并在其上附加一个 mousedown 事件:

attachGlobalButtonEventHandler : function(view){
        view.$el.find('button.viewtag, button.newtag').on('mousedown', function(){
            var $target = $(this);

            $target.addClass('activated');
            $target.prop('disabled', true);
        });
    }

这很好用,但问题是按钮上的主干事件没有被触发,如下所示:

events : {
            'click .newtag' : 'gotoCreate'
        },
        gotoCreate : function(evt) {
            evt.preventDefault();

            app.router.navigate('somewhere', true);
        }

如果我删除attachGlobalButtonEventHandler,那么点击newtag会很好地触发,但如果附加了处理程序,则根本不会触发。如何确保主干点击事件也会触发?

4

1 回答 1

6

这里的问题是disabled属性和订单事件被执行。

mousedown事件发生在事件之前click,在mousedown回调中您禁用按钮,从而完全删除click事件。

检查这个jsFiddle。如果您注释掉该行,$(this).prop('disabled', true);则该click事件将触发。

通过添加 asetTimeout您可以在下一个刻度上有效地执行它,有关详细信息,请参阅此jsFiddle

编辑:我刚刚注意到@codemonkey 添加了一条评论,暗示了同样的事情。

于 2013-06-24T18:01:56.820 回答