iFrame 内的 jQuery 对话框未运行关闭功能

问题描述 投票:0回答:1

我有一个简单的 jQuery UI 对话框。当单独查看页面时,一切都按预期工作,除非该页面位于 iframe 中。由于某种原因 close: 函数没有触发。

单独查看页面时一切正常; open: 函数在 iframe 内正常触发;但是, close: 函数不会触发。

hide: 似乎也不起作用,对话框保持打开状态,不会关闭或运行 close: 函数。同样,只有在必须在 iframe 中加载该页面时才会这样做。

对话框和 iframe 是否有任何问题会导致此问题?他们还使用数据表插件,以便可以对表进行排序等。这会引起问题吗?

尝试寻找答案,但没有出现这样的结果

//jQuery UI: v1.12.1
//jQuery DataTables: v1.10.13
//jQuery: v1.12.4 (they're don't want to update, but temporary loaded v3.7.1 with same result)
//Firefox, Firefox developer, and Chrome lastest versions

$('#popupDialog').dialog({
    autoOpen: false,
    height: 'initial',
    width: 'initial',
    show: {
        effect: 'slide',
        duration: 500
    },
    hide: {
        effect: 'transfer',
        to: '#logo2',
        className: 'ui-effects-transfer',
        duration: 500
    },
    modal: true,
    open: function() {
        alert('ttt');
    },
    close: function() {
        alert('rrr');
    }
});
jquery jquery-ui datatables
1个回答
0
投票

您的代码似乎可以在 iFrame 中运行:

https://jsfiddle.net/Twisty/qhe0L1an/

JavaScript

$(function() {
  var $html = $("<html>");
  $("<head>").appendTo($html);
  $("<link>", {
    rel: "stylesheet",
    href: "https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"
  }).appendTo($("head", $html));
  $("<script>", {
    src: "https://code.jquery.com/jquery-1.12.4.js"
  }).appendTo($("head", $html));
  $("<script>", {
    src: "https://code.jquery.com/ui/1.12.1/jquery-ui.js"
  }).appendTo($("head", $html));
  $("<body>").appendTo($html);
  $("<div>", {
    id: 'popupDialog',
    title: "Test Dialog"
  }).html("<p>My Dialog</p>").appendTo($("body", $html));
  $("<button>", {
    id: "openDiag",
  }).html("Open").appendTo($("body", $html));
  $("<script>").text("console.log('Loading Script in iFrame'); $('#popupDialog').dialog({ autoOpen: false, height: 'initial', width: 'initial', show: { effect: 'slide', duration: 500 }, hide: { effect: 'transfer', to: '#logo2', className: 'ui-effects-transfer', duration: 500 }, modal: true, open: function() { console.log('ttt'); }, close: function() { console.log('rrr'); } }); $('#openDiag').click(function(){ $('#popupDialog').dialog('open'); })").appendTo($("body", $html));

  var $iframe = $("<iframe>").css({
    width: "100%",
    height: "380px"
  }).attr("srcdoc", $html.prop("outerHTML")).appendTo("body");
});

大部分代码只是构建 HTML 和 iFrame 结构。当您在框架中运行 JS/jQuery 时,必须加载该库。如果它被加载到父级中,框架将无法访问这些库。

© www.soinside.com 2019 - 2024. All rights reserved.