Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从jQuery UI对话框中的按钮在动态创建的iFrame中调用函数_Jquery_Jquery Ui_Iframe - Fatal编程技术网

从jQuery UI对话框中的按钮在动态创建的iFrame中调用函数

从jQuery UI对话框中的按钮在动态创建的iFrame中调用函数,jquery,jquery-ui,iframe,Jquery,Jquery Ui,Iframe,摘要: 使用jQuery UI对话框和动态创建的iFrame,是否可以从对话框中定义的按钮之一调用iFrame中的函数 详细信息: 我刚刚开始使用jQuery和jQuery UI,我正在尝试将现有的应用程序转换为使用.dialog功能 “内联弹出窗口”的方法很好,但jQuery不能与之共存,因为它们都使用$()方法。我知道您可以,但我认为转到jquerylock stock and barrel更容易,而不是让它们共存 前一个插件的优点是能够将弹出窗口的内容指定为页面上现有的、直接HTML代码或

摘要:

使用jQuery UI对话框和动态创建的
iFrame
,是否可以从
对话框中定义的按钮之一调用
iFrame
中的函数

详细信息:

我刚刚开始使用jQuery和jQuery UI,我正在尝试将现有的应用程序转换为使用
.dialog
功能

“内联弹出窗口”的方法很好,但jQuery不能与之共存,因为它们都使用
$()
方法。我知道您可以,但我认为转到jquerylock stock and barrel更容易,而不是让它们共存

前一个插件的优点是能够将弹出窗口的内容指定为页面上现有的
、直接HTML代码或(对我来说最重要的)指向不同页面的URL

让这些能力中的最后一个发挥作用,这就是我目前拥有的

$(document).ready(function () {
  var iframe = $('<iframe id="myFrame" width="100%" height="100%" frameborder="0" marginwidth="0" marginheight="0"></iframe>');
  var dialog = $('<div id="myDiv"></div>').append(iframe).appendTo("body").dialog({
    autoOpen: false,
    modal: true,
    resizable: true,
    width: 600,
    height: 600,
    title: "My Popup",
    close: function () {
      iframe.attr("src", "");
    },
    buttons: [{ text: "Call iFrame Function",
                click: function () { alert($("#myFrame").contentWindow); }
              },
              { text: "Close Popup",
                click: function () { $("#myDiv").dialog("close"); }
              }]
  });
  iframe.attr({ src: "SubPage.html" });
  dialog.dialog("open");
});
$(文档).ready(函数(){
变量iframe=$('');
var dialog=$('').append(iframe.appendTo(“body”).dialog({
自动打开:错误,
莫代尔:是的,
可调整大小:正确,
宽度:600,
身高:600,
标题:“我的弹出窗口”,
关闭:函数(){
iframe.attr(“src”,即“);
},
按钮:[{text:“调用iFrame函数”,
单击:函数(){alert($(“#myFrame”).contentWindow);}
},
{文本:“关闭弹出窗口”,
单击:函数(){$(“#myDiv”)。对话框(“关闭”)}
}]
});
iframe.attr({src:“SubPage.html”});
dialog.dialog(“打开”);
});
我无法计算的是…

我如何通过点击按钮在jQuery动态创建的iFrame中运行javascript


为什么
.contentWindow
$(“#myFrame”)中。contentWindow
总是
未定义的
?(我可以确认
$(“#myFrame”)
返回有问题的iframe。)

编辑:原因是$(“#myFrame”)。contentWindow未定义是由iframe元素组成的jQuery对象没有contentWindow属性。您需要获取(0)以获取实际的窗口元素,您可以在该元素上调用该命名空间中定义的Javascript函数

$("#myFrame").get(0).contentWindow.myFunction(args);
要遍历和操作其DOM,请使用以下命令获取iframe的内容文档:

var framedoc = $("#myFrame").get(0).contentDocument || $("#myFrame").get(0).contentWindow.document;
然后您应该能够像处理普通文档一样对其进行操作,例如

$(framedoc).find("input#whatever").val(myInput).closest("form").submit()

或者你想触发的任何东西。

尝试使用$(“#myFrame”).contents()。查找(“”)谢谢@arbit,但我不明白如何调用函数。。。例如,如果我在iFrame内的页面中有
函数doThis(){alert(“hello”);}
,我将如何调用
函数doThis()
?对不起,我必须在接下来的两个小时内离开。。。我会尽快回复评论/答案。我以前从未尝试过,但尝试过类似window.frames['frameName'].doThis()的方法;啊,这是有道理的,我仍在努力了解jquery。我会在早上试试(在英国睡觉前通过我的手机检查一下)完美:-)谢谢你的帮助,
.get(0)
正是我所需要的