2012-10-25 132 views
1

我有一個jQuery對話框,並使用open回調將一些數據加載到via AJAX。在jQuery UI對話框上以編程方式觸發事件

例如:

$('#dialog').dialog({ 
    modal: true, 
    autoOpen: false, 
    open: function(){ 
     $('.content', this).load('/path/to/file', function(){ 
      // even more code 
     }); 
     // more code 
    } 
}); 

雖然對話框已經打開,我想通過AJAX重新加載數據。我想我可以觸發上面綁定的open函數。我在the docs中讀到,您可以使用$(".selector").bind("dialogopen", function(event, ui){})綁定到該open事件,所以我想我也可以這樣觸發事件。

我試過$('#dialog').trigger('dialogopen'),但什麼也沒有發生。我如何觸發jQuery對話框的open事件?

目前,我發現我可以使用$('#dialog').dialog('option', 'open')(),但這很醜陋,還有更好的辦法!

回答

1

爲什麼不只是在open事件中提取函數並在任何你想要的地方重用它?

$('#dialog').dialog({ 
    modal: true, 
    autoOpen: false, 
    open: function(){ 
     loadfunction() 
    } 
}); 

function loadfunction(){ 
    $('.content').load('/path/to/file', function(){ 
      // even more code 
     }); 
     // more code 
} 

因此您可以隨時隨地使用loadfunction

+1

這是一個好主意。絕對比'$('#dialog')。clean('option','open')()'更清潔。 –

+1

毫米不錯的一個..如果對話框內沒有任何額外的代碼,我會簡單地執行'open:loadfunction' incase –

3

你可以重寫你有什麼像$('#dialog').dialog('option')['open']()(再醜)

哪些可以被美化爲,

var $dOpt = $('#dialog').dialog('option'); 

然後

$dOpt.open(); 

DEMO:http://jsfiddle.net/bj4hK/2/


我認爲你正在尋找$('#dialog').dialog('open')http://jsfiddle.net/bj4hK/

其他骯髒的伎倆是關閉並重新打開。 $('#dialog').dialog('close').dialog('open') < - 但是這將爛攤子,如果你有一些代碼onclose

+2

如果對話框已經打開,這似乎不起作用。這就是我想要的。 http://jsfiddle.net/NTICompass/bj4hK/1/ –

+0

嗯,我沒有意識到$('#dialog')。dialog('option')'返回了一個對象。 –

+1

@RocketHazmat我都沒有..它不得不調試他們的代碼,找到一個出來.. –

0

在jQuery UI的了,方法是通過調用插件的名稱和參數提供的方法名調用。所以你可以這樣做:

$('#dialog').dialog("open"); 
+2

如果對話框已經打開,這似乎不起作用。這就是我想要的。 http://jsfiddle.net/NTICompass/bj4hK/1/ –

+0

如果對話框已經打開,那麼在打開對話框時應該這樣做。如果你想採取一些行動,無論對話是否已經打開,寫一個執行這個動作並調用''的函數。對話框( 「開放」)'。 – Barmar

+0

我想要做的是打開對話框,觸發'open'函數,以便重新載入AJAX數據。 –

相關問題