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

Method for triggering certain click event using .trigger() but suppressing all others

本文关键字:事件 其他 单击 trigger 使用 方法      更新时间:2023-09-26

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

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

目前我知道,当点击的元素执行某种ajax调用,并加载更多的数据到页面的DOM(这是我想触发),但它也显示一个覆盖(这是我想暂时抑制)。

因为它只是一个覆盖,所以我可以做一些变通;在点击后直接使用display:none。然而,如果我能以某种方式抑制该元素上的所有点击事件,除了想要的事件,那就好得多了。

有什么想法,如果这实际上是可能的?如果是的话,我该怎么做呢?

您需要在事件链的顶部注册您自己的事件。并取消事件中的事件链。下面是一个编写自定义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,似乎事件预防在这个例子中不起作用。也许还有别的办法