我无法在UL中的dom元素上停止click事件,主要是在itemClicked方法中我想取消单个元素上的click事件。单击列表中的项目时,尽管该项目没有值,该项目仍会触发单击事件。有没有办法使用undelegate只是单击的indiviudal元素?我不知道为什么和任何帮助非常感谢。
App.Views.AttributeSelectorView = Backbone.View.extend({
itemClicked: function (event) {
var $target = $(event.target);
this.trigger('itemClicked', $target.data('attr'), $target.text());
this.undelegateEvents();
},
events: {
'click [role=menuitem]': 'itemClicked'
}
});
attributeSelectorView.on('itemClicked', function(attribute, display){
// .remove attribute
query.add({
attribute: attribute,
display: display
}, {
merge: true
});
});
答案 0 :(得分:2)
尝试使用stopListening,it Tell an object to stop listening to events
。
itemClicked: function (event) {
var $target = $(event.target);
this.trigger('itemClicked', $target.data('attr'), $target.text());
this.stopListening();
}
答案 1 :(得分:1)
您正在点击处理程序本身中设置pointer-events
属性。点击事件已经在您更改其target
元素的样式时发生。
您需要在点击发生之前设置该属性才能使其生效。
或者,如果您知道要忽略哪些元素点击,您可以在点击处理程序中添加逻辑:
itemClicked: function(e) {
if(!shouldIgnoreThisTarget) {
this.trigger('...')
}
}
在许多方面,这样做会更好。它将点击行为放在一个位置,减少了CSS和JavaScript之间的耦合。
答案 2 :(得分:-1)
pointer-events
仅影响样式 - 因此它不会影响元素的功能(即.javascript事件)。
如果您想阻止javascript中的默认点击行为,您可以点击处理程序return false,或将event.preventDefault
设置为true