我正在开发一个相当轻量级的实时应用程序。
我们正在使用jQuery的事件系统在我们的应用程序中的模块之间进行通信。因此,在DOM中进行更改的所有内容都应该影响模块之外的任何事情。事件必须这样做。
这些事件由clientide socket.io实现捕获,它要求nodejs socket.io服务器将事件广播给所有其他客户端。
我的问题: 有没有办法找出触发事件的选择器?如果我打电话给
$("tag.class").trigger("myevent");
我可以以某种方式做到
$(document).on("myevent", function() {
console.log(this.selector)
});
它将打印“tag.class”
这很有趣,因为知道用户在选择上触发了某个事件会很有趣,而不是某些元素上的某个事件可能会在之后显得非常随机。
我已阅读this question但我希望能够在应用程序中触发的所有事件上获取选择器。
感谢您的时间:)
答案 0 :(得分:2)
从链接的答案中获取灵感,您可以覆盖jQuery trigger
函数。类似的东西:
$.fn.origTrigger = $.fn.trigger;
$.fn.trigger = function (fn) {
var selector = this.selector;
this.origTrigger(function (ev) {
fn(ev, selector);
});
};
答案 1 :(得分:0)
您最好的选择是通过活动发送数据。它也更强大,因为你有更多的控制权。选择器可能不漂亮,但数据是。
$('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"}
});