如何在一个函数调用中组合jQuery UI对话框标题更改和打开

时间:2012-05-21 23:13:58

标签: javascript jquery jquery-ui jquery-dialog

我有一个案例需要更新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 个答案:

答案 0 :(得分:2)

这是正确/唯一的方法,因为您有2个事件,对话框打开本身,以及单击表格单元格。这也是在实例化jQuery UI对话框后更改任何选项的正确方法。

你做的唯一不必要的事情就是my_dlg在第二次使用它时卡住了$(),它不需要因为它已经是一个jQuery对象。

答案 1 :(得分:2)

这是调用窗口小部件方法的标准方法。给定窗口小部件(在您的案例中为dialog)公开的所有方法都会在窗口小部件的名称下桥接到$.fn,以便它们可以应用于jQuery对象。

但是,如果您想避免重复调用dialog(),您可以获得对窗口小部件实例的引用并直接调用其方法:

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