4

フォームを含むダイアログを開くためにjQueryのモーダルダイアログを使用しています。解決できないのは、モーダルダイアログに追加されたコンポーネントにイベントをバインドする方法です。この場合、クリックをバインドするか、ダイアログに配置されているチェックボックスに変更します。ダイアログがロードされたときにトリガーされる成功メソッドはないようです。これが私のやり方です:

これは、JavaScriptの最初、ready-functionの最初に行います。

$( "#dialog:ui-dialog" ).dialog( "destroy" );

$( "#dialog-modal" ).dialog({
    autoOpen: false,
    show: "blind",
    hide: "explode",
    minWidth: 400,
    modal: true
 });

少し後で、ボタンをクリックしたときにこれを行います。

$('#dialog-modal').dialog( "option", "title", lang.localized_text.ADD_AGENT);
$('#dialog-modal').live('dialogopen', function(msg){
        alert("Opens");
        $("#select_all").live('click', function(msg){
               alert("clicked");  
        });

 });
$.get("https://" + hostname +  "/modules/core/useradmin/adminactivities/admin_add_agent.php",function(e){
     var obj = $.parseJSON(e);
     $("#dialog-modal").html(obj.html);
     $("#dialog-modal").dialog("open");
     addAddAgentValidation();
}
});

ダイアログが開く前にalert( "Opens")が表示されていることがはっきりとわかります。したがって、dialogopenは、ダイアログのロードが完了する前にトリガーされます。ただし、検証ハンドラー(検証チェックをバインドするvalidate関数を呼び出す)は機能します。

alert( "クリック"); トリガーされることはありません。

モーダルダイアログのコンポーネントにイベントをバインドするにはどうすればよいですか?ダイアログが作成されたときのコールバック関数はありますか?

4

2 に答える 2

4

選択は#dialog-modalになり、#dialog-modalはdomreadyに存在するため(そして破棄されることはありませんか?)、$。on()を使用できます。

$('#dialog-modal').on('click', '#select_all', function(e){
    alert('clicked');
});

ただし、#select_allをdomに含めると、クリックイベントをバインドすることもできます

$.get("https://" + hostname +  "/modules/core/useradmin/adminactivities/admin_add_agent.php",function(e){
     var obj = $.parseJSON(e);
     $("#dialog-modal").html(obj.html);
     $('#select_all').click(function(e){
         alert('clicked');
     });
     $("#dialog-modal").dialog("open");
     addAddAgentValidation();
}
于 2012-07-24T14:20:06.247 に答える
2

最近のjQueryリリースで.liveを置き換えた.onメソッドでバインドできます。この場合、DOMの準備ができたときにそこにあることがわかっているもの(本体など)にバインドします。これで、バインドする必要があるのは1回だけで、#select_allをクリックするたびに起動します。

$("body").on('click', '#select_all', function () {
    alert("clicked");  
});

http://api.jquery.com/on/

于 2012-07-24T14:10:43.743 に答える