单击表单后执行延迟操作

时间:2009-05-07 03:00:40

标签: php javascript forms

我有以下代码在弹出窗口中打开表单。我想在点击提交按钮后,在1250毫秒后弹出警报。当页面被重定向到提交表单的结果时,这当前不起作用。

<?php
$blah = "Well"; $test = "Done";
echo '<script type="text/javascript" src="fetchlayers.js"></script>';
$formcode = "<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=\"setTimeout(function() { alert('$blah'); },1250);\" /></form>";


echo "<h1>hello</h1>
<div id='form'>
<a href='#' onclick=\"createpopup('" . htmlentities($formcode) . "'); return false;\">
click here</a>
</div>";

提交表单后采取延迟行动的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

尝试在计时器回调中使用document.form.submit()而不是使用提交按钮

答案 1 :(得分:0)

如果我理解正确,您想要打开一个包含表单的弹出窗口,然后在提交表单后显示一个警告框?

尝试在setTimeout()回调中使用window.opener。通过这种方式,您可以告诉原始窗口显示警告框 - 您的弹出页面已被重定向无关紧要。

答案 2 :(得分:0)

  

提交表单后采取延迟行动的最佳方式是什么?

您无法从同一窗口按顺序执行这两项操作。一旦表单提交,您就会有效地离开当前页面的状态并请求新资源。

从弹出窗口中,您将获得父窗口的引用。当用户想要提交表单时,您可以调用一些JavaScript在父窗口中执行延迟操作,然后允许弹出窗口中的表单提交。

编辑:根据你的评论,这里是一种在窗口之间进行通信的方式;你可以这样设置一个简单的设置:

<!-- parent.html -->
<input type="button" onclick="doOpenChild();" value="Spawn Child Window" />

<script type="text/javascript">
  function doOpenChild() {
    window.open(
      "child.html",
      "child"
    );
  }

  function doSomething() {
    setTimeout(
      function(){
        alert(fileINeedToCheck);
      },
      2000
    );
  }

  // Set variable for child to update...
  window.fileINeedToCheck = "unset";
</script>

使用以下内容生成弹出窗口:

<!-- child.html -->
<form action="/someaction.php" name="childForm" onsubmit="communicateWithParent(this);">
  <input type="text" name="fileName" value="100" />
  <input type="submit" value="Submit" />
</form>

<script type="text/javascript">
  function communicateWithParent(aForm) {
    if(window.opener) {
      if(window.opener.fileINeedToCheck) {
        window.opener.fileINeedToCheck = aForm.fileName.value;

        // You can also call functions from the parent window...
        window.opener.doSomething();
      }
    }
  }
</script>

可以使用子窗口中的值更新父窗口的变量。