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时,处理程序会立即与处理程序注册一起被调用。点击后不会调用处理程序,但会在注册发生时立即调用!是什么原因?
答案 0 :(得分:0)
我相信你已经使用$(' body')on("点击"," .menu-item",menuClick)附加了menuClick或者类似的东西。
现在当调用menuClick时,你绑定了$(document).on(...在你的问题中,该事件最终会冒泡到你的文档,触发一个点击并调用你刚刚附加的处理程序。
如果你绑定到$(' body')。on(...,处理程序被附加,但由于事件已经冒泡到正文,因此事件不会再次触发起来。
您可以在menuClick中添加event.stopPropagation()以阻止事件冒泡。