如何将事件绑定到模式对话框上的组件?

Nic*_*oft 5 html javascript jquery modal-dialog event-binding

我正在使用 jQuery 的模式对话框来打开包含表单的对话框。我无法解决的是如何将事件绑定到添加到我的模式对话框中的组件。在本例中,我想将单击或更改绑定到已位于对话框中的复选框。加载对话框时似乎没有触发任何成功方法。我就是这样做的:

我在 javascript 的开头、ready-function 的开头执行此操作:

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

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

稍后,我在单击按钮时执行此操作:

$('#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();
}
});
Run Code Online (Sandbox Code Playgroud)

可以清楚地看到在打开对话框之前出现了alert(“Opens”)。因此,dialogopen 在对话框完成加载之前被触发。但是验证处理程序(调用绑定验证检查的验证函数)可以工作。

警报(“点击”);永远不会被触发。

如何将任何事件绑定到模式对话框上的组件?对话框创建后是否有回调函数?

Shi*_*ryu 5

由于您的选择将在 #dialog-modal 中并且由于 #dialog-modal 存在于 domready 上(并且从未被销毁?),因此您可以使用 $.on()

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

但是,当您将 #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();
}
Run Code Online (Sandbox Code Playgroud)