【问题标题】:Alert to close child windows before form submission提交表单前提醒关闭子窗口
【发布时间】:2013-09-01 10:30:11
【问题描述】:

我有一个表格数据,每行都有一个动态链接,可以在新窗口(新的浏览器选项卡)中打开一个外部链接。这些行有 n 个数字,具有动态 ID。

我需要的是,当用户尝试提交表格详细信息时,他们必须关闭所有子窗口。如果任何子 div 仍然打开并且他尝试提交表单,它应该发出警报以关闭子窗口

这是表单的示例 DEMO

<form>
    <table border="1">
        <tr>
            <td><input type="text" /></td>
            <td>SC1</td>
            <td><a href="http://www.google.com" target="_blank">this is an external link</a></td>

<tr>
            <td><input type="text" /></td>
            <td>SC2</td>
            <td><a href="http://www.google.com" target="_blank">this is an external link</a></td>

            <tr>
            <td><input type="text" /></td>
            <td>SC3</td>
            <td><a href="http://www.google.com" target="_blank">this is an external link</a></td>
</tr>
    </table>
            <input type="submit"  value="submit" />
</form>

【问题讨论】:

  • 子窗口是指通过外部链接打开的新浏览器窗口?
  • 你最好自己创建、打开和关闭窗口
  • 记录相关元素对象的状态。像这样的东西:this.isTabOpen。其中this 是被点击的元素。
  • @Mr_Green 但她如何知道打开的窗口是否已被用户关闭?

标签: javascript jquery new-window


【解决方案1】:

有一个 js 函数调用 window.open() 来创建新窗口。跟踪创建的引用。

此外,您在演示中提供的代码并不能保证在新窗口中打开链接。

相关的小提琴 http://jsfiddle.net/DS83p/

【讨论】:

    【解决方案2】:

    看起来您需要跟踪打开的窗口并在提交时关闭它们

    var windows = [];
    $('a').click(function(){
        var win = window.open($(this).attr('href'),"_blank");
        windows.push(win);
    });
    $('input[type="submit"]').click(function(){
        if(windows && windows.length > 0)
            $.each(windows,function(index,el){
                el.close();
            });
    });
    

    这是你可以使用的小提琴http://jsfiddle.net/JpDhX/4/

    【讨论】:

      【解决方案3】:

      您可以将每个打开的窗口存储在一个数组中,并在用户尝试提交表单时检查打开的窗口:

      var windows = [];
      $('a').click(function () {
          var myWindow = window.open(this.href);
          windows.push(myWindow);
      });
      
      $('form').submit(function () {
          for (var i = 0; i < windows.length; i++) {
              if (!windows[i].closed) {
                  alert('Close all windows before continuing');
                  return false;
              }
          }
      });
      

      Demo fiddle

      【讨论】:

      • 不错的一个.. 但是如果指定的 OP 超过 100 行,这很好吗?
      • @Mr_Green 好吧,我想我们应该问问用户是否应该打开所有 100 个窗口
      • lolzz 这是一个有效的观点。首先,它会导致系统崩溃。
      【解决方案4】:
      1.Instead of <a href> use onclick javascript:window.open.
      2.Give title to the window.
      3.For closing
        if (document.title === "the title you want") {
          window.close();
        }
      4.Give the above code in button Click.
      

      【讨论】:

      • 但是有超过 100 行,所以我无法根据标题进行检查。我也不想自动关闭窗口。它应该只是给出一个警告消息,说新窗口仍然打开
      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多