2012-10-12 62 views
2

我正在開發一個相當輕量級的實時應用程序。jQuery,爲觸發事件的元素查找選擇器

我們正在使用jQuery的事件系統在應用程序中的模塊之間進行對話。因此,在DOM中發生變化的所有內容都必須通過事件來影響模塊外部的任何內容。

這些事件被客戶端的socket.io實現捕獲,它要求nodejs socket.io服務器將事件廣播到所有其他客戶端。

我的問題: 有沒有一種方法找出什麼選擇器事件被觸發?所以,如果我叫

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

我能以某種方式做

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

它會打印出「tag.class」

這很有趣,因爲這將是有趣的知道用戶觸發一個選擇上的某個事件,而不是某些事件上的一些元素,這些事件可能在隨後顯得非常隨機。

我已閱讀this question但我希望能夠獲得應用程序中觸發的所有事件的選擇器。

謝謝你的時間:)

回答

2

從鏈接獲得靈感回答,你可以覆蓋jQuery trigger函數。例如:

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

這真是個好主意。 –

+0

謝謝!我認爲這更符合我希望完成的任務。 – atamon

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"} 
}); 
+0

謝謝! 我試圖避免在觸發時不得不發送構造函數。似乎給所有觸發事件的人帶來負擔。我們已經使用可選參數來告訴事件處理程序要做什麼。不用在那裏包含選擇器也不錯。 – atamon

相關問題