0

jquery ダイアログのコンテンツを div に配置しました。しかし、この方法でダイアログを初期化するときはいつでも:

$(".uof_add_form").dialog({
  autoOpen : false,
  height : 500,
  width : 600,
  modal : true,
  buttons : {
   "Done" : function() {
    $(this).close();
  }
  }
});

コンテンツは私のdivから削除されます。そして、この理由で私は使用できません

$("#new_form").on("click",".add_level", function(){
        var wrapper_data = $(this).parent().parent().parent().parent();
        wrapper_data.find(".uof_add_form").dialog("open");

});

私のダイアログを開くために。

私のコンテンツは動的に生成されるため、使用する必要があります$(this)

コンテンツを div 内にとどめる方法はありますか?

この方法で div で行うクリック自体で初期化するようにコードを変更しましたdisplay:none:-

$("#new_form").on("click",".add_level", function(){
    var wrapper_data = $(this).parent().parent().parent().parent();
    wrapper_data.find(".add_level_pop").dialog({autoOpen : true, height : 500,width : 600,modal : true, buttons : {   "Done" : function() {  $(this).dialog('close'); } } });

});

ダイアログは最初のクリックで開きますが、ダイアログの初期化時にコンテンツが別の場所に転送されているため、2 回目のクリックではダイアログが起動しません。

jsfiddleのサンプルも追加しました。こちらを確認してください

4

2 に答える 2

1

最初の問題を理解しているかどうかはわかりませんが、フィドルのコードを見て、次のことを検討してください。

  • がすでにある場合は、セレクターでクラス修飾子を省略します。これは、ダイアログ要素に固執するため、常に( fiddle v3 )でID見つけることができます。<div>DOM
  • ロード時に変数に保存し<div>て、DOM にクエリを実行せずにアクセスできるようにします ( fiddle v4 )

フィドルの両方の更新バージョンで、探しているものであれば、2回目のクリックでダイアログが開きます。それが役に立てば幸い。


より一般的な状況を解決しようとすると、それに応じて別のフィドル バージョンで例を更新しました。ダイアログ div は、.data()関数を使用してボタンに保存されます。ダイアログを開くには、保存されたダイアログが使用されます。

于 2013-04-09T09:04:56.810 に答える
0

の戻り値を.dialog()ハンドルとして使用します。

var handle = $(".uof_add_form").dialog({
 [...]
});

その後、ある時点で、

handle.dialog("open");
于 2013-04-08T14:26:37.470 に答える