使用jquery

时间:2015-04-26 12:10:39

标签: javascript jquery ember.js event-handling click

menuClick: function () {
            var _this = this;
            var clickNamespace = 'click.menu-item' + this.get('currentComponentIndex');

            Ember.$(document).on(clickNamespace, function (event) {
                if (!Ember.$(_this.getSourceFromEvent(event)).closest(_this.$('.menu-item')).length)    {
                    Ember.$(document).off(clickNamespace);
                    _this.set('isSubmenuVisible', false);       
                }
            });
            this.set('isSubmenuVisible', true);
        },

只要点击菜单按钮,就会注册一个点击处理程序,当点击发生在正文中的任何其他位置时,点击处理程序将被取消注册。 当我做Ember。$(' body')。它工作得非常好但是当我做Ember。$(document).on时,处理程序会立即与处理程序注册一起被调用。点击后不会调用处理程序,但会在注册发生时立即调用!是什么原因?

1 个答案:

答案 0 :(得分:0)

我相信你已经使用$(' body')on("点击"," .menu-item",menuClick)附加了menuClick或者类似的东西。

现在当调用menuClick时,你绑定了$(document).on(...在你的问题中,该事件最终会冒泡到你的文档,触发一个点击并调用你刚刚附加的处理程序。

如果你绑定到$(' body')。on(...,处理程序被附加,但由于事件已经冒泡到正文,因此事件不会再次触发起来。

您可以在menuClick中添加event.stopPropagation()以阻止事件冒泡。