2012-05-21 50 views
3

我有一個情況,我需要更新每個表格單元格時,雙擊一個零件編號的jQuery UI對話框標題。 標題將從表格單元的值本身獲得。如何結合jQuery UI對話框標題更改並打開一個函數調用

這個片段(見下文)從實際代碼的工作,但它只是不 似乎正確的我,因爲我必須調用兩次對話功能:(1) 更改標題,和(2)開放對話框。

有沒有更好的方法來將這兩個操作與一個調用 .dialog()?

JS代碼片段

// Dialog declaration 
var my_dlg = $('<div id="my-dlg">') 
    .html(
    '<span class="part">FOO BAR</span>' 
) 
    .dialog({ 
    autoOpen: false, 
    title: 'Default Title', 
    modal: true 
    }); 

// Event handler 
$('td.part').live('dblclick', function(){ 
    $(my_dlg) 
    .dialog('option','title', $(this).text()) 
    .dialog('open'); 
}); 

HTML摘錄

<table> 
<tr><td class="part">AB123456</td></tr> 
<tr><td class="part">GX443459</td></tr> 
<tr><td class="part">SK555455</td></tr> 
</table> 

回答

2

這是做什麼的,你有2個事件,對話框開放本身的正確/唯一途徑,而點擊的表格單元格。這也是在實例化jQuery UI對話框中更改任何選項的正確方法。

您所做的唯一不必要的事情是在第二次使用它時卡住my_dlg$(),因爲它已經是jQuery對象,所以不需要這樣做。

+0

真棒。謝謝。 – JTP

2

這是調用小部件方法的標準方式。所有由給定小部件公開的方法(您的案例中的dialog)都會在小部件名稱下橋接到$.fn,以便它們可以應用於jQuery對象。

但是,如果你想避免重複調用dialog(),你可以到窗口小部件實例的引用和直接調用其方法:

my_dlg.data("dialog").option("title", $(this).text()).open(); 
+0

我嘗試了類似的東西,無濟於事。當我到達商店時將不得不重新訪問。與雙重方法調用相比,這個構造有沒有明顯的優勢? – JTP

+0

@jtp,它可能會更快一點,因爲這個小部件實例只會被提取一次,並且避免了方法橋,但這可能不會引起注意。 –

相關問題