Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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
jquery.submit-return-false不总是有效_Jquery_Forms - Fatal编程技术网

jquery.submit-return-false不总是有效

jquery.submit-return-false不总是有效,jquery,forms,Jquery,Forms,我以前问过一个问题,但我现在需要回答的问题似乎有点离题,所以我认为最好提出一个新问题 我试图阻止表单提交,直到页面上的所有ajax调用都成功返回 我对此有一个简单的测试(当调用开始时,在计数器上加1,成功时减去1) 我相信我应该能够做到: // can we submit yet? $('#checkoutform').submit(function() { if (ajaxcallcounter == 0) { return true; } return

我以前问过一个问题,但我现在需要回答的问题似乎有点离题,所以我认为最好提出一个新问题

我试图阻止表单提交,直到页面上的所有ajax调用都成功返回

我对此有一个简单的测试(当调用开始时,在计数器上加1,成功时减去1)

我相信我应该能够做到:

// can we submit yet?
  $('#checkoutform').submit(function() {
    if (ajaxcallcounter == 0) {
      return true;
    }
    return false;
  });
阻止表单提交,直到计数器达到零(所有调用都已完成),但由于某些原因,这似乎不是100%有效

我不知道这是不是在转移视线,但所有在通话结束前设法退房的客户的报告都使用了Mac Safari(不过这可能只是巧合)


您可以看到代码的运行情况—尝试更改交付国家以触发一些ajax调用。当计数器大于0时,应禁用右下角的提交按钮。

定义var ajaxcallcounter=0;超出你的职责范围。将它放在JavaScript文件的顶部,使其成为一个文件

通常,您可以通过停止事件的传播来确保完全控制事件。每个事件处理程序都有一个隐式参数,通常定义为“e”或“event”,您可以对其调用preventDefault(),如下所示:

$('#checkoutform').submit(function(e) {
    e.preventDefault();
    if (ajaxcallcounter == 0) {
      return true;
    }
    return false;
  });

定义var ajaxcallcounter=0;超出你的职责范围。将它放在JavaScript文件的顶部,使其成为一个文件

通常,您可以通过停止事件的传播来确保完全控制事件。每个事件处理程序都有一个隐式参数,通常定义为“e”或“event”,您可以对其调用preventDefault(),如下所示:

$('#checkoutform').submit(function(e) {
    e.preventDefault();
    if (ajaxcallcounter == 0) {
      return true;
    }
    return false;
  });

他已经这么做了。它不是全局的,但它位于由jQuery“ready”函数形成的闭包中,所有事件处理程序都是在该闭包中定义的。而且,他几乎肯定不想总是在每一个事件上“防止违约”。是的,我知道这在当前定义的范围内,但这种风格总是让我感觉不舒服。在其他地方(例如,另一个js include)定义函数并想知道为什么事情不能正常工作太容易了。不是说提问者想要阻止所有的默认事件处理,只是在这种情况下,他们想要对行为进行明确的控制。嗨,汤姆,尖刻-我不太理解preventDefault,所以在没有更多解释的情况下,我没有信心使用它。在Tom提供的示例中,preventDefault是否以不同的方式返回false,或者这是一种“安全带和支架”方法?@Ashley:event.preventDefault()停止事件传播,这意味着您正在禁用正常行为。例如,如果您创建一个表单并在没有js的情况下按submit,它将通过GET或POST发送。使用preventDefault()时,它不会被发送。另一个正常的例子是锚点,如果没有js,锚点将更改de document.location。使用preventDefault()时,它只会执行您的代码。他已经在这样做了。它不是全局的,但它位于由jQuery“ready”函数形成的闭包中,所有事件处理程序都是在该闭包中定义的。而且,他几乎肯定不想总是在每一个事件上“防止违约”。是的,我知道这在当前定义的范围内,但这种风格总是让我感觉不舒服。在其他地方(例如,另一个js include)定义函数并想知道为什么事情不能正常工作太容易了。不是说提问者想要阻止所有的默认事件处理,只是在这种情况下,他们想要对行为进行明确的控制。嗨,汤姆,尖刻-我不太理解preventDefault,所以在没有更多解释的情况下,我没有信心使用它。在Tom提供的示例中,preventDefault是否以不同的方式返回false,或者这是一种“安全带和支架”方法?@Ashley:event.preventDefault()停止事件传播,这意味着您正在禁用正常行为。例如,如果您创建一个表单并在没有js的情况下按submit,它将通过GET或POST发送。使用preventDefault()时,它不会被发送。另一个正常的例子是锚点,如果没有js,锚点将更改de document.location。使用preventDefault()时,除了你的代码外,它什么都不会做。我没有答案。我要说的是,您在整个代码中对
ajaxcallcounter
进行了大量的递增和递减操作。您可能会发现,使用一个可以被调用的递增和递减函数非常有用。然后你可以做一些简单的日志记录,看看他们什么时候被呼叫。嗨,帕特里克,有很多递增和递减,因为有很多呼叫!)我相信他们是在正确的时间接到电话的,但是表格是可以提交的。我没有答案给你。我要说的是,您在整个代码中对
ajaxcallcounter
进行了大量的递增和递减操作。您可能会发现,使用一个可以被调用的递增和递减函数非常有用。然后你可以做一些简单的日志记录,看看他们什么时候被呼叫。嗨,帕特里克,有很多递增和递减,因为有很多呼叫!)我相信他们是在正确的时间被叫到的,但是表格是允许提交的。