2012-01-03 119 views
0

我想添加關閉時自動銷燬對話框的功能,而無需向當前項目中的每個對話框調用添加任何特殊代碼。所以我認爲它需要覆蓋默認對話框close事件。jQuery UI事件功能擴展

我發現了一個辦法做到這一點(例如:How to extend a jquery ui widget ? (1.7)),但我不希望只是重寫事件:我還需要保存事件的以前的行爲,並在其後添加$(this).dialog("destroy")電話。

有什麼建議嗎?

+0

您必須先保存一個破壞處理器,運行你自己的,然後保存一個。 你如何設法重寫這個處理程序? – kaz 2012-01-03 12:10:08

回答

3

我不是100%肯定這是正確的,但我認爲,你可以放心地忽略這樣的關閉方法:

$.ui.dialog.prototype._originalClose = $.ui.dialog.prototype.close; 
$.ui.dialog.prototype.close = function() { 
     alert ('My stuff'); 
     $.ui.dialog.prototype._originalClose.apply(this, arguments); 
}; 

你可以看到在這個工作:http://jsfiddle.net/8KKMm/

不過,避免覆蓋外部庫通常是一個好主意。可能有更好的方法來實現你的目標,而不會妨礙jQuery UI庫。請查看Dialog組件的可用事件:http://jqueryui.com/demos/dialog/

+0

謝謝,工作正常。而且,是的,使用事件會更好。無論如何,也想知道如何打電話內部的方法'摧毀'或'打開'自我? TIA。 – User 2012-01-03 12:37:42

+1

我想你可以簡單地在這個上下文中調用'this.destroy()'。看看http://jsfiddle.net/8KKMm/2/。 – jjmontes 2012-01-03 12:49:47

1

您可以將dialogclose處理程序添加到頁面的body元素。

你可以找到一個樣本here

有沒有必要重寫對話框類的關閉功能,你可以簡單地使用對話框類提供的事件。

例:

$("body").on("dialogclose", function(){ 
    alert("closed"); 
});