【问题标题】:Creating an event when closing a window using Javascript使用 Javascript 关闭窗口时创建事件
【发布时间】:2013-10-03 03:58:37
【问题描述】:

我正在创建一个弹出窗口,允许我从中选择值,然后在我选择了值之后,我需要关闭窗口,然后将其传递给我的主窗体。

我的主窗体中的代码:

onClick="cust=window.open('popup.php?count=<?=$RowStart?>&name_id=' + document.form1.name_id<?=$RowStart?>.value'custWindow','top=50, left=50, height=150, width=375, scrollbars=yes, resizable=yes');cust.focus(););

以及弹窗内的代码:

<form name="form1" action="<?=$_SERVER['PHP_SELF']?>" method="post">
<table width="100%" border="0" cellpadding="0" cellspacing="0"> 
<tr>
<td>
<input id="name" name="name" type="text"/>
<input id="nameid" name="nameid" type="hidden" value ="<?=$name_id?>"/>
</td>
<td>
<input name="ellipse" type="button" value="..." onClick="ellipse=window.open('engine_item_list2.php?name='+document.form1.name.value,'ellipse','top=50,left=50,width=500,height=500, scrollbars=yes, resizable=yes'); ellipse.focus();"/> 
</td>
</tr>
</table>
</form>

当我单击主窗体中的按钮时会发生什么情况,它会打开一个新窗口,其中弹出窗口有一个窗体。表单内部是一个椭圆,它使用来自名称文本字段的输入获取 name_id 的值。

我能够从椭圆中获取值到 name_id,因为椭圆里面有一个提交按钮。但是我的弹出窗口 form1 不应该包含保存按钮,因此我必须通过在关闭弹出窗口时提交或使用其他方式将弹出窗口中的值传递回主表单。

我想我应该使用 window.close() 但我不知道如何使用它传回数据。有没有办法可以链接窗口中的关闭按钮,以便在单击它时将值传递回主窗体?

【问题讨论】:

  • 您可以使用 javascript 传递数据,只需定位父窗口和该窗口中的元素,然后从打开的窗口中插入一个值或任何内容。父窗口是 window.opener
  • 你检查过相关问题吗? This one 看起来很相似。

标签: javascript php jquery forms popup


【解决方案1】:

当在您的弹出窗口中单击“完成”按钮或类似的东西时,您应该能够使用弹出窗口中的window.opener 来找到打开它的窗口,然后将您的数据放入 DOM 或 javascript该窗口的变量。将弹出窗口中的数据放入原始窗口后,您可以使用window.close()关闭弹出窗口。

注意,现在更常见的是在同一个窗口中为您的表单使用临时覆盖而不是弹出一个新窗口,它还避免了与弹出窗口阻止程序的任何冲突,这些冲突可能会妨碍您弹出新窗口窗口。

这不会处理窗口中的关闭角。这通常等同于“取消”操作,因此在单击它时无需执行任何操作(按照正常的 UI 约定)。典型的 UI 将涉及“完成”、“完成”或“确定”按钮,当用户希望输入的数据被接受时,这些按钮将被单击。在此按钮的单击处理程序中,您将使用window.opener 查找父/主窗口,将弹出表单中的数据放入该窗口,然后调用window.close() 关闭弹出窗口。

【讨论】:

  • 我有点困惑。我正在考虑使用 ajax 将数据提交回父窗口,但是我可以在卸载弹出窗口时这样做,还是必须调用 window.close()?
  • @marchemike - Ajax 用于与服务器通信,而不是用于与其他浏览器窗口通信。如果您只想将数据放入另一个窗口,则使用 window.opener 获取另一个窗口,然后访问全局变量或该另一个窗口的 DOM 并将数据放入另一个窗口。
【解决方案2】:

Javascript

window.onbeforeunload=function(){
   alert('This is the popup!');
}

function window.onbeforeunload(){
   alert('This is the popup!');
}

【讨论】:

  • 是否意味着当我点击窗口上的关闭按钮时,在进程被杀死之前,它可以使用此功能将数据发送回主窗体?我只需要将变量放在那里还是必须与父窗口中的字段建立连接?
  • 以下我相信 - “当我单击窗口上的关闭按钮时,在进程被终止之前,它可以使用此功能将数据发送回主窗体。”虽然我不太确定!
  • HTML5 规范说像alert() 这样的函数调用可以从onbeforeunload 中忽略。
  • @JackWilliams - 是的,所以我建议您将示例更改为可能实际可行的示例。如果 OP 尝试您建议的代码只是为了查看它是否有效,他们可能会发现它不起作用。我可以建议console.log()吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
相关资源
最近更新 更多