Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在表单中的onsubmit操作之前,是否有一种暂停或等待函数完成的方法_Javascript_Html_Form Submit - Fatal编程技术网

Javascript 在表单中的onsubmit操作之前,是否有一种暂停或等待函数完成的方法

Javascript 在表单中的onsubmit操作之前,是否有一种暂停或等待函数完成的方法,javascript,html,form-submit,Javascript,Html,Form Submit,我有一个简单的例子,我发现onsubmit需要立即返回值。我有一个函数,它会暂停5秒,等待完成,然后返回布尔值以模拟其他javascript处理操作。但是,即使在我的函数返回任何值之前,页面表单提交仍然会触发。那么我应该怎么做,在JS中使用回调对我的情况有帮助吗 <html> <body> <form action="test.html" onsubmit="return testing();"> <button type="submit"> h

我有一个简单的例子,我发现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>

你好,世界
功能测试()
{
var newState=-1;
setTimeout(函数(){
如果(新闻状态==-1){
警报(“视频已停止”);
output=“newText”;
控制台日志(“5秒后:+输出);
返回false;
}
}, 5000);
//返回false;
}

一个选项是在单击按钮本身时调用testing()。您可以在timeout函数中手动调用submit()。但请确保在调用testing()后返回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>

你好,世界
功能测试()
{
var newState=-1;
setTimeout(函数(){
如果(新闻状态==-1){
警报(“视频已停止”);
output=“newText”;
控制台日志(“5秒后:+输出);
document.getElementById(“myForm”).submit();
返回false;
}
}, 5000);
//返回false;
}

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

一个选项是在按钮单击本身中调用testing()。您可以在timeout函数中手动调用submit()。但请确保在调用testing()后返回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>

你好,世界
功能测试()
{
var newState=-1;
setTimeout(函数(){
如果(新闻状态==-1){
警报(“视频已停止”);
output=“newText”;
控制台日志(“5秒后:+输出);
document.getElementById(“myForm”).submit();
返回false;
}
}, 5000);
//返回false;
}

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

一个选项是在按钮单击本身中调用testing()。您可以在timeout函数中手动调用submit()。但请确保在调用testing()后返回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>

你好,世界
功能测试()
{
var newState=-1;
setTimeout(函数(){
如果(新闻状态==-1){
警报(“视频已停止”);
output=“newText”;
控制台日志(“5秒后:+输出);
document.getElementById(“myForm”).submit();
返回false;
}
}, 5000);
//返回false;
}

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

一个选项是在按钮单击本身中调用testing()。您可以在timeout函数中手动调用submit()。但请确保在调用testing()后返回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>

你好,世界
功能测试()
{
var newState=-1;
setTimeout(函数(){
如果(新闻状态==-1){
警报(“视频已停止”);
output=“newText”;
控制台日志(“5秒后:+输出);
document.getElementById(“myForm”).submit();
返回false;
}
}, 5000);
//返回false;
}
顺便说一句,似乎不需要newState变量。

除非“函数完成”,否则无法提交表单

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

我已将这些函数分开,以便更清晰

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;
    }
}
除非“函数完成”,否则无法提交表单,它确实完成了

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

我已将这些函数分开,以便更清晰

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;
    }
}
除非“函数完成”,否则无法提交表单,它确实完成了

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

我已将这些函数分开,以便更清晰

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;
    }
}
除非“函数完成”,否则无法提交表单,它确实完成了

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

我已将这些函数分开,以便更清晰

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;
    }
}


并非函数的所有分支都返回值。仔细检查。提示:
的默认类型为提交;无需具体说明。我为什么会投反对票(您可以使用javascript提交表单,如本例所示。我知道我的所有分支都应该有一个返回值。但我想知道,在我完成JS函数中的所有操作后,是否有办法获得返回值?您在这里想做什么?按下按钮5秒后提交表单?不是所有函数分支都返回。)s值。重复检查。提示:
的默认类型为submit;无需指定它。我为什么得到否决票(您可以使用javascript提交表单,如本例所示。我知道我的所有分支都应该有一个返回值。但我想知道,在我完成JS函数中的所有操作后,是否有办法获得返回值?您在这里想做什么?按下按钮5秒后提交表单?不是所有函数分支都返回。)s value.Double check.Hint:submit是
的默认类型;不需要指定它。为什么我得到了否决票?:(你可以用javascript提交表单,就像在这个例子中一样,我知道我的所有分支都应该有一个返回值。但是我想知道,在我完成JS函数中的所有操作之后,有没有办法获得返回值