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

Javascript 如何将事件绑定到模式对话框上的组件?,javascript,jquery,html,modal-dialog,event-binding,Javascript,Jquery,Html,Modal Dialog,Event Binding,我使用jQuery打开一个包含表单的对话框。我无法解决的是如何将事件绑定到添加到模态对话框中的组件。在本例中,我希望将单击或更改绑定到对话框中已定位的复选框。在加载对话框时,似乎没有触发任何成功方法。我就是这样做的: 这是我在javascript的开头,在ready函数的开头所做的: $( "#dialog:ui-dialog" ).dialog( "destroy" ); $( "#dialog-modal" ).dialog({ autoOpen: false, show:

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

这是我在javascript的开头,在ready函数的开头所做的:

$( "#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();
}
});
可以清楚地看到,在打开对话框之前会显示警报(“打开”)。因此,在对话框完成加载之前,会触发dialogopen。但是验证处理程序(调用绑定验证检查的验证函数)可以工作

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


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

您可以使用.on方法绑定它,该方法在最近的jQuery版本中取代了.live。在本例中,您将它绑定到DOM准备就绪时(如主体)已知的内容。现在,您只需绑定一次,每次单击“全选”按钮时就会触发

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

由于您的选择将处于#对话框模式,并且#对话框模式出现在domready上(并且从未销毁过?),因此您可以使用()

但在dom中包含#select_all时,也可以绑定click事件

$.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();
}

您使用的是哪个版本的jQuery live在1.7中被弃用。在open上绑定它意味着如果它被多次打开,您每次都会继续向元素添加事件。您应该使用jQuery UI dialog event:Plus,$.live()已弃用,我认为。live已弃用,但它仍然可以工作--而且不赞成!=非功能@Shikiryu-他正在使用事件。你看到他的密码了吗
$(“#dialog modal”).live('dialogopen'
是建议绑定的内容。他只是使用
.live()
而不是
.bind()
不管怎么说,它是按预期工作的。我正在使用jquery 1.7.2。@Shik,这是我在帖子中包含的链接。现在请查看您的JSFIDLE。如何设置内容与我的设置方式不同,这会有所不同吗?谢谢,但不起作用。请查看我的问题下的最后一条评论。这可能是解决方案,但我认为我可以需要先解决一些其他问题。当内容被动态添加时,你真的可以添加这样的事件吗…?嗯,是的,它可以工作…我想我必须更深入地研究绑定到动态内容。。。
$.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();
}