0

我有使用 AJAX 调用页面 B 的页面 A。页面 B 将被放入页面 A 的 div 容器中。在结果(即页面 ​​B)中,有一段代码将启动一个 jQuery UI 对话框。对话框的 div 也在 Page B 中。但是,它不起作用。我必须将启动代码放在页面A中。那么,如果我想将启动代码放在页面B中,我应该怎么做?

启动代码:


$('#dialog').dialog({
    bgiframe: true,
    autoOpen: false,
    width: 300,
    height: 300,
    modal: true,
    resizable: false,        
    buttons: {
        'Create an account': function() { },
         Cancel: function() { }
    },
    close: function() { }
});

我也尝试过$('div.dialog')用作选择器(将 id 更改为类)并且它确实有效,但是每次我请求页面 B(不重新加载页面 A)时,对话框都会成倍增加。例如,我第一次请求页面 B 时,将打开一个对话框。我第二次请求页面 B 时,将打开两个对话框。

4

2 回答 2

1

您的方法并不遥远,您只是在每次加载时复制调用中的对话框,因此销毁前一个,而不是这样:

$('div.dialog').dialog({ ...options... });

调用这个:

$('div.dialog').dialog('destroy').dialog({ ...options... });

这可以防止为同一个元素实例化多个对话框。或者,您可以检查是否已在该元素上创建对话框,如下所示:

$('div.dialog').filter(function() {
  return $(this).closest('.ui-dialog').length === 0;
}).dialog({ ...options... });

这只会在<div class="dialog">尚未包含在对话框中的元素上创建对话框。

于 2010-05-09T13:17:59.393 回答
0

您可以使用带有自定义事件绑定的jQuery 实时函数来做到这一点。每次调用 Page B 时,都必须触发自定义事件,以便可以在事件处理程序中绑定新的对话框元素。如果您遵循此方法,则启动代码必须仍在页面 A 中。

于 2010-01-18T09:06:37.540 回答