2

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

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

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

我的问题:有没有办法找出触发事件的选择器?所以如果我打电话

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

我能以某种方式做到

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

它会打印“tag.class”

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

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

感谢您的时间 :)

4

2 回答 2

2

从链接的答案中获取灵感,您可以覆盖 jQuerytrigger函数。就像是:

$.fn.origTrigger = $.fn.trigger;
$.fn.trigger = function (fn) {
  var selector = this.selector;
  this.origTrigger(function (ev) {
    fn(ev, selector);
  });
};
于 2012-10-12T12:16:47.220 回答
0

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

$('tag.class').trigger('myevent', ['some', 'param']);

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

当然,如果你想发送尽可能多的参数,你可以使用一个“选项”对象并以这样的方式处理它:

$('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"}
});
于 2012-10-12T12:06:20.983 回答