所以我有一个html页面(实际上用php生成),它将创建一个包含表单的弹出窗口。我所有的javascript东西都在一个单独的javascript文件中。我想知道是否可以从表单resulttext中调用我的javascript文件中的函数。
这是第一个html页面
<script type="text/javascript" src="x.js"></script><h1>hello</h1>
<div id='form'>
<a href='#' onclick="makewindows('<form action="process.php" method="post" enctype="multipart/form-data "><label for="file">Filename:</label><input type="file" name="file" id="file"/> <br /><input type="submit" name="submit" value="Submit" onclick="" /></form>'); return false;">
click here</a>
</div>
上传文件后,会生成显示文件名称的结果文本。在x.js中,我有一个函数来更新原始窗口中的div。我可以从普通的html页面调用它吗?
以下是maewindows的代码
function makewindows(html){
child1 = window.open ("about:blank");
child1.document.write(html);
child1.document.close();
}
我不想用onclick调用该函数,我想从表单的结果文本中调用它。
答案 0 :(得分:1)
您想要在打开的窗口中运行的脚本中使用window.open来访问在打开窗口的同一页面中声明的Javascript函数吗?
window.opener正是您要找的。 p>
例如,如果您将x.js
中定义的函数定义为function foobar(s)
(并且主窗口中包含x.js
),则可以返回以下内容作为来自process.php
的回复:
<script type="text/javascript">
window.opener.foobar('returned text');
window.close();
</script>
字符串“返回的文本”将传递回foobar
函数。
这样做的原因是,使用全局范围中的function
关键字定义的任何内容都会自动添加为当前window
对象的属性。如果您的函数未在全局范围内定义,则可以强制它为window
的属性,如下所示:
window.foobar = function(s) { ... }
答案 1 :(得分:0)
makewindows做什么? 您可能希望将该html放在模板或某种类型的单独文件中。 是的,您可以从表格事件,即onsubmit事件中调用javascript。
答案 2 :(得分:0)
是的,你可以。您只需按名称调用它,就像在html文件中定义的任何函数一样。
答案 3 :(得分:0)
如果我正确理解您的问题,您正在尝试更新弹出窗口中的某些信息,并在打开弹出窗口的页面中反映更新的信息?
我认为this可能对您有帮助。
答案 4 :(得分:0)
托比亚斯是对的。
但是没有开启属性,主窗口和目标窗口无法通信 - 没有关系。
这篇过时的文章说明了onclicks的一个解决方案,尽管有一个目标。 玩你可能很有趣。 http://homepage.mac.com/bigeuniverse/tests/targetwindows/
然而,今天最好用听众和与之相关的功能来做到这一点。 我会在你的' makewindows '函数中清楚地定义开启者, 以及定义窗口。
PARENT: 像这样:
var child1 = null;
function makewindows(html)
{
if (!child1 || child1.closed) {
child1 = window.open(...);
...//rest of original code
} else {
child1.focus();
/* in case it's okay to simply open the same window
for another upload; otherwise, nix this section*/
}
if (child1.opener == null) {
child1.opener = self;
}
}
CHILD: 假设x.js有一个名为'childListener'的函数: 您的process.php可以提供自动执行的JavaScript 功能到'子'页面,如:
var talkToParent = function(saywhat)
{
opener = opener || self.opener || window.opener;
if (opener != null && saywhat) {
opener.childListener(saywhat);
}
}($uploaded_filename);
只要上传的文件名已经发送,这将立即执行(当然,从脚本标记内)。如果您将php设置为代替文件名,那么您实际上可以提醒父母上传错误。同样,这假设' childListener '函数位于x.js或从开启者页面调用的其他一些脚本。