我需要觀察幾個jQuery UI對話框中的事件。他們都來標準a few events,你可以聽。 到目前爲止沒有問題。觀察來自幾個jQuery UI對話框的事件
我可以用這一個功能綁定到開放事件:
$(document).bind('dialogopen', function() {});
不過,我需要區分哪個對話框事件起源。例如:
$('#dialog1').dialog();
$('#dialog2').dialog();
打開其中任何一個都會觸發相同的事件。綁定到文檔的功能在打開時會觸發兩個對話框。這不是我所希望的。我發現了兩種可能的解決方案,但都不是很好,但至少可以完成這項工作。
解決方案1:觸發回調函數的自定義事件開事件
// Trigger events
$('#dialog1').dialog({open: function() {
$(this).trigger('dialog1open')
}
});
$('#dialog2').dialog({open: function() {
$(this).trigger('dialog2open')
}
});
// Observe events
$(document).bind('dialog1open', function() {
//actions specifik to dialog 1 open event
});
$(document).bind('dialog2open', function() {
//actions specifik to dialog 2 open event
});
這樣要求我開始他們的時候,只需編寫自定義函數的所有事件,在所有對話使用特定於每個對話框的事件名稱轉發它。
解決方案2: 捕獲事件參數中的目標。這將是這個樣子:
$(document).bind('dialogopen', function(event) {
el = event.target; // get the element triggering the event
switch(el.id) { // Action depending on the triggers id
case dialog1:
//do something
break;
case dialog2:
//do something else
break
}
});
這種方式,另一方面要求我有開關的情況下的負載對每個事件我感興趣的捕捉。
會寫一個包裝插件是一個好主意嗎?一個插件,迫使你給每個對話框一個id
。然後它會以id
作爲前綴或後綴來重新觸發每個事件。例如,打開#dialog1
會觸發自定義事件dialog1open
。
思路或具體的解決方案將在這裏感謝
編輯:我沒有提到一個重要的事情是,我有觀察家認爲主題(像#dialog1
和#dialog2
)不知道的。這必須考慮在內。
我可能忘記提及一件重要的事情 問題。我使用觀察者#dialog1和#dialog2不一定知道。 $(文檔)將操作和事件委託給觀察者,如下所述:http://stackoverflow.com/questions/12590091/jquery-observer-pattern我將嘗試在問題中反映這一點 – Anders