是否有一种方法暂停或等待一个函数完成之前onsubmit动作的形式

Is there a way to pause or wait for a function to finish before onsubmit action in form

本文关键字:onsubmit 方法 一种 暂停 一个 是否 等待 函数      更新时间:2023-09-26

我有一个简单的例子,我发现onsubmit需要立即返回值。我有一个暂停5秒的函数,直到它完成,然后返回布尔值来模拟其他javascript处理动作。但是,即使在我的函数设法返回任何值之前,页面表单提交仍然会触发。那么我该怎么做,在JS中使用回调对我的情况有帮助吗?

<html>
<body>
<form action="test.html" onsubmit="return testing();">
<button type="submit"> hello world </button>
</form>
</body>
<script>
function testing()
{
    var newState = -1;
    setTimeout(function() {
    if (newState == -1) {
      alert('VIDEO HAS STOPPED');
      output = "newText";
      console.log("AFTER 5 Sec: " + output);
      return false;
    }
  }, 5000);
    //return false;
}
</script>
</html>

一个选项是在按钮单击本身中调用testing()。您可以在超时函数中手动调用submit()。但是一定要在调用test()之后返回false。

例如:

<form id="myForm" action="test.html">
    <button type="submit" onclick="testing(); return false;"> hello world </button>
</form>

<script type="javascript">
function testing()
{
    var newState = -1;
    setTimeout(function() {
       if (newState == -1) {
          alert('VIDEO HAS STOPPED');
          output = "newText";
          console.log("AFTER 5 Sec: " + output);
          document.getElementById("myForm").submit();
          return false;
       }
   }, 5000);
   //return false;
}
</script>

顺便说一句,似乎不需要newState变量。

表单不能提交,除非'function '完成。

超时将调用一个不同的函数,该函数在将来的某个时刻独立运行;只需根据进程的标志/状态禁用默认的提交操作。

我把这些函数分开了,这样更清楚。

var state; // undefined, 'waiting', 'done'
function waitForVideo () {
    alert('VIDEO HAS STOPPED');
    console.log("AFTER 5 Sec: " + output);
    // call submit again (or do whatever)
    state = 'done';
    document.forms[0].submit();
}
function testing()
{
    if (!state)
    {
        state = 'waiting';
        // function queued for timeout - not run immediately
        setTimeout(waitForVideo, 5000);
    }
    if (state === 'waiting') {
        // don't submit - timeout not done
        return false;
    }
}