从jQuery UI对话框中的按钮在动态创建的iFrame中调用函数
摘要: 使用jQuery UI对话框和动态创建的从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代码或
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)
正是我所需要的