jQuery,查找触发事件元素的选择器



我正在努力开发一个相当轻量级的实时应用程序。

我们使用jQuery的事件系统在应用程序中的模块之间进行通信。因此,在 DOM 中进行的所有更改都应该影响模块外部的任何内容,都必须通过事件来实现。

这些事件由客户端 socket.io 实现捕获,该实现要求nodejs socket.io 服务器将事件广播到所有其他客户端。

我的问题:有没有办法弄清楚事件是在哪个选择器上触发的?这样如果我打电话

$("tag.class").trigger("myevent");

我可以以某种方式做到

$(document).on("myevent", function() {
    console.log(this.selector)
});

它将打印"标签.class"

这很有趣,因为知道用户在选择中触发了某个事件,而不是之后可能看起来非常随机的元素上的某个事件会很有趣。

我已经阅读了这个问题,但我希望能够获得应用程序中触发的所有事件的选择器。

感谢您抽出宝贵时间:)

从链接的答案中汲取灵感,你可以覆盖jQuery trigger函数。像这样:

$.fn.origTrigger = $.fn.trigger;
$.fn.trigger = function (fn) {
  var selector = this.selector;
  this.origTrigger(function (ev) {
    fn(ev, selector);
  });
};

最好的办法是随事件一起发送数据。它也更强大,因为您有更多的控制权。选择器可能不漂亮,但数据很漂亮。

$('tag.class').trigger('myevent', ['some', 'param']);
$(document).on('myevent', function(param1, param2) {
    console.log(param1); // "some"
    console.log(param2); // "param"
});

当然,如果你想发送任意数量的参数,你可以使用一个"options"对象,并通过以下方式处理它:

$('tag.class').trigger('myevent', [{some: 'option', other: 'option'}]);
$(document).on('myevent', function(options) {
    var opts = {
        default: 'option',
        some: 'default',
        other: 'default'
    };
    $.extend(opts, options);
    console.log(opts); // {default: "option", some: "option", other: "option"}
});

最新更新