取消单一事件

时间:2014-09-17 18:52:15

标签: javascript jquery css backbone.js javascript-events

我无法在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
    });
  });

3 个答案:

答案 0 :(得分:2)

尝试使用stopListeningit 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