从表单结果调用javascript函数

时间:2009-05-14 02:54:50

标签: javascript html

所以我有一个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调用该函数,我想从表单的结果文本中调用它。

5 个答案:

答案 0 :(得分:1)

您想要在打开的窗口中运行的脚本中使用window.open来访问在打开窗口的同一页面中声明的Javascript函数吗?

window.opener正是您要找的。

例如,如果您将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或从开启者页面调用的其他一些脚本。