使用.trigger()触发某些点击事件但是抑制所有其他事件的方法

时间:2015-10-08 13:49:22

标签: javascript jquery javascript-events

我的情况是我试图使用jquery .trigger()方法触发单个事件。但是,我触发的元素有多个click事件侦听器。

实际上找到这些侦听器是什么以及它们从源代码触发的内容可能不可行,因为它包含在站点主JS文件中并且它全部缩小并且几乎不可读。

目前我知道单击时的元素执行某种ajax调用并将更多数据加载到页面的DOM中(这是我想要触发的),但是它也会显示一个叠加层(这就是我的内容)想暂时压抑。)

由于它只是一个叠加,我可以制作一个变通方法..使用显示:在点击后直接使用它等。但是如果我可以以某种方式抑制此元素上除所需事件之外的所有点击事件,它会更加优雅

任何想法,如果这实际可能吗?如果是这样我会怎么做呢?

1 个答案:

答案 0 :(得分:0)

您需要在活动链的顶部注册自己的活动。并取消活动中的活动链。这是一个编写自定义jquery扩展的解决方案。

$.fn.bindFirst = function (which, handler) {
  var $elm = $(this);
  $elm.unbind(which, handler);
  $elm.bind(which, handler);
  var events = $._data($elm[0]).events;
  var registered = events[which];
  registered.unshift(registered.pop());
  events[which] = registered;
}

$("#elm").bindFirst("click", function(e) {
   // edit: seems like preventing event does not work
   // But your event triggers first anyway.
   e.preventDefault();
   e.stopPropagation();
});

参考: https://gist.github.com/infostreams/6540654

编辑: https://jsfiddle.net/8nb9obc0/2/ 我做了一个jsFiddle,似乎事件阻止在这个例子中不起作用。可能还有另一种解决方案。