1

请看下面的更新

这是我的代码:

$(document).on('click', '#btnClose, .ui-dialog-titlebar-close', function () {
    alert('test');
});

当我单击时它会触发#btnClose,但不会触发右上角的jQuery UI关闭按钮。

我也尝试翻转它,我得到了相同的结果。

$(document).on('click', '.ui-dialog-titlebar-close, #btnClose', function () {});

这是 jQuery UI 关闭按钮的 HTML:

<button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close" role="button" aria-disabled="false" title="close">
    <span class="ui-button-icon-primary ui-icon ui-icon-close"></span>
    <span class="ui-button-text">close</span>
</button>

更新按钮位于 iframe 中。这一定是问题所在。有什么创意吗?

这是我目前拥有的:

       function closeDialog() {
           alert('Closing');
               //this works fine
       }

       $(document).on('click', '#btnClose', function () {
           closeDialog()
               //this never fires
       });

       window.parent.$(document).on('click', '.ui-dialog-titlebar-close', function () {
           closeDialog();
       });

第二个仍然不工作。请记住,脚本是 iFrame 的一部分,因此它需要从父级访问选择器。奇怪的是我正在使用 window.parent.$() 来做其他事情而没有问题。

4

4 回答 4

1

这很疯狂,但它确实有效。

$('#btnClose').add(parent.$('.ui-dialog-titlebar-close')).on('click', function () {
    closeDialog();
});
于 2013-08-29T20:30:00.703 回答
0

iframe如果内容不在同一个域中,则您不能以任何方式与 的内容进行交互。(有postMessage,但这是另一个主题)。

如果 iframe 来自同一个域,则很容易,而不是:

$(document)

利用

$("#iframeID").contents().

于 2013-08-29T19:57:51.040 回答
0

您可能正在处理同源策略。安全策略将防止对来自其他站点或协议的元素进行破坏。

于 2013-08-29T20:00:49.660 回答
0

原始代码中缺少右圆括号。JS 对括号非常敏感。如果缺少括号并且您的代码将不起作用,则调用将不正确。我已经修复了你的代码:

$(document).on('click', '#btnClose, .ui-dialog-titlebar-close', function () {
    alert('test');
});

同样适用于第二段代码:

$(document).on('click', '.ui-dialog-titlebar-close, #btnClose', function () {}
);

在这两种情况下,函数都有三个参数.on:两个字符串和回调函数。

这可能是复制/粘贴错误,但很可能恰好是问题的“原因”。

于 2013-08-29T19:29:16.220 回答