4

テーブル セルがダブルクリックされるたびに、パーツ番号で jQuery UI ダイアログのタイトルを更新する必要がある場合があります。タイトルは、テーブル セルの値自体から取得されます。

実際のコードからのこのスニペット (以下) は機能しますが、(1) タイトルを変更し、(2) ダイアログを開くために、ダイアログ関数を 2 回呼び出す必要があるため、正しくないように思えます。

.dialog() への 1 回の呼び出しで両方の操作を組み合わせるより良い方法はありますか?

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>
4

2 に答える 2

2

これは、2 つのイベント (ダイアログ自体を開くこと、およびテーブル セルをクリックすること) があるため、正しい/唯一の方法です。これは、インスタンス化した後に jQuery UI ダイアログのオプションを変更する正しい方法でもあります。

あなたが行った唯一の不必要なことは、それを2回目に使用するときにスタックmy_dlgする$()ことです.これは、すでにjQueryオブジェクトであるため、その必要はありません.

于 2012-05-22T13:39:02.873 に答える
2

これは、ウィジェット メソッドを呼び出す標準的な方法です。dialog特定のウィジェット(あなたの場合)によって公開されるすべてのメソッド$.fnは、ウィジェットの名前の下にブリッジされるため、jQuery オブジェクトに適用できます。

ただし、 を繰り返し呼び出すのを避けたい場合はdialog()、ウィジェット インスタンスへの参照を取得して、そのメソッドを直接呼び出すことができます。

my_dlg.data("dialog").option("title", $(this).text()).open();
于 2012-05-22T13:44:31.843 に答える