Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 在ajax检查后停止并重新启动submit()_Jquery_Ajax - Fatal编程技术网

Jquery 在ajax检查后停止并重新启动submit()

Jquery 在ajax检查后停止并重新启动submit(),jquery,ajax,Jquery,Ajax,最近我问了一个问题[],但它没有给我答案。下面是我想做的,你可以看到我在上面链接的第一次尝试: 用户提交表单 停止默认提交操作 检查数据库中是否存在类似的条目 如果确实如此,则显示一条通知,询问他们是否仍要提交,并提供一个允许他们仍要提交的选项(启用默认操作并提交) 如果没有,则启用表单上的默认操作并让其提交 我不知所措。感谢您的帮助。谢谢大家 编辑Simeon:以下是我在您的解决方案中使用的代码: var forceSubmitForm = false; $('#purchaser_cont

最近我问了一个问题[],但它没有给我答案。下面是我想做的,你可以看到我在上面链接的第一次尝试:

  • 用户提交表单
  • 停止默认提交操作
  • 检查数据库中是否存在类似的条目
  • 如果确实如此,则显示一条通知,询问他们是否仍要提交,并提供一个允许他们仍要提交的选项(启用默认操作并提交)
  • 如果没有,则启用表单上的默认操作并让其提交
  • 我不知所措。感谢您的帮助。谢谢大家

    编辑Simeon:以下是我在您的解决方案中使用的代码:

    var forceSubmitForm = false;
    $('#purchaser_contact').submit(function(){
    
      if(forceSubmitForm) return true;
    
      if( $("#id").val()=="" ){
    
        if( $("#fname").val()=='' || $("#city").val()=='' ){ alert('First Name and City are required fields. Please fill these in before continuing.'); return false; }
    
          $.ajax({
            type: "POST",
            url: 'ajax/contactSearch.php',
            data: ({ fname: $("#fname").val(), lname: $("#lname").val(), city: $("#city").val(), state: $("#state").val() }),
            success: function(d) {
                var obj = JSON.parse( d );
                if(obj.result != 0){
                $("#contactSearch").remove();
                $("#button-wrapper").before('<div id="contactSearch">'+obj.result+'</div>');
                $("#contactSearch").slideToggle('slow');                                
              } else {
                forceSubmitForm = true;
                $('#purchaser_contact').submit(); // Form will submit
              }
            }
          });   
    
          return false;
    
      } //END IF empty id
    
    });     
    
    var forceSubmitForm=false;
    $(“#买方_联系人”)。提交(功能(){
    if(forceSubmitForm)返回true;
    如果($(“#id”).val()=“”){
    如果($(“#fname”).val()=''(“#city”).val()=''){alert($(名字和城市是必填字段。请在继续之前填写它们。);返回false;}
    $.ajax({
    类型:“POST”,
    url:'ajax/contactSearch.php',
    数据:({fname:$(“#fname”).val(),lname:$(“#lname”).val(),city:$(“#city”).val(),state:$(“#state”).val(),
    成功:功能(d){
    var obj=JSON.parse(d);
    如果(对象结果!=0){
    $(“#contactSearch”).remove();
    $(“#按钮包装”)。在(“”+obj.result+“”)之前;
    $(“#contactSearch”).slideToggle('slow');
    }否则{
    forceSubmitForm=true;
    $(“#买方_联系人”).submit();//表单将提交
    }
    }
    });   
    返回false;
    }//如果id为空,则结束
    });     
    
    直到第二次按下提交按钮(即,
    $(“#采购商_联系人”)。提交();
    不会提交表单),此操作才起作用


    编辑这对我来说从来都不起作用,但Simeon的答案是最接近的,他声称它适用于所有主要浏览器,因此如果它对某人有帮助,那就太好了。

    您可以通过向提交事件添加回调函数来处理表单。如果要停止提交,可以对事件使用preventDefault()或返回false

    $('form').submit(function(event) {
       event.preventDefault();
    
       //do stuff, you can put your ajax call here
       ...
    
       if(fail) { return false; }
       else { return true; }
    });
    

    您可以通过向submit事件添加回调函数来处理表单。如果要停止提交,可以对事件使用preventDefault()或返回false

    $('form').submit(function(event) {
       event.preventDefault();
    
       //do stuff, you can put your ajax call here
       ...
    
       if(fail) { return false; }
       else { return true; }
    });
    

    这就是您正在寻找的解决方案

    var forceSubmitForm = false;
    $('#myForm').submit(function(){
        if(forceSubmitForm) return true;
        $.ajax({
            // ...
            success: function(data){
                if(data.entry != 'OK'){ // or whatever check
                    forceSubmitForm = true;
                    $('#myForm').submit(); // Form will submit
                }else{
                    // Form will not be submitted
                }
            }
        });
        return false;
    });
    
    编辑 为了向自己证明这种方法是有效的,我创建了一个带有表单和提交按钮的示例页面。这在所有主要浏览器中都运行良好:

    $(function(){ // On DOM ready
        var forceSubmitForm = false;
    
        $('#purchaser_contact').live('submit', function() {
            if (forceSubmitForm){
                alert('submitting');
                return true;
            }
    
            // A callback function works in the same manner as a timeout
    
            setTimeout(function(){
                forceSubmitForm = true;
                $('#purchaser_contact').submit();
            }, 1500); // Submit after 1,5 seconds
    
            return false; // Do not submit immediately
        });
    });
    

    这就是您正在寻找的解决方案

    var forceSubmitForm = false;
    $('#myForm').submit(function(){
        if(forceSubmitForm) return true;
        $.ajax({
            // ...
            success: function(data){
                if(data.entry != 'OK'){ // or whatever check
                    forceSubmitForm = true;
                    $('#myForm').submit(); // Form will submit
                }else{
                    // Form will not be submitted
                }
            }
        });
        return false;
    });
    
    编辑 为了向自己证明这种方法是有效的,我创建了一个带有表单和提交按钮的示例页面。这在所有主要浏览器中都运行良好:

    $(function(){ // On DOM ready
        var forceSubmitForm = false;
    
        $('#purchaser_contact').live('submit', function() {
            if (forceSubmitForm){
                alert('submitting');
                return true;
            }
    
            // A callback function works in the same manner as a timeout
    
            setTimeout(function(){
                forceSubmitForm = true;
                $('#purchaser_contact').submit();
            }, 1500); // Submit after 1,5 seconds
    
            return false; // Do not submit immediately
        });
    });
    
    以下是jQuery示例(未测试):

    以下是jQuery示例(未测试):


    本质上,您希望在提交表单时运行一个函数,然后在函数为负时使表单操作短路。这样做应该可以:

    $("form#myForm").submit(function(){
        if(someCustomFunction()){//do the check
                event.preventDefault; //short circuit
                someOtherCustomFunction();//display your alternative
    
        }
    });
    

    本质上,您希望在提交表单时运行一个函数,然后在函数为负时使表单操作短路。这样做应该可以:

    $("form#myForm").submit(function(){
        if(someCustomFunction()){//do the check
                event.preventDefault; //short circuit
                someOtherCustomFunction();//display your alternative
    
        }
    });
    

    这让我发疯,没有解决方案,它要么不提交表单,要么进入无限循环提交表单。所以我把submit按钮变成了常规按钮。然后在ajax循环中提交表单。这意味着您不必担心停止submit按钮的默认操作,因为它只是一个常规按钮

    <form id="loginForm" method="post" action="login.php">
    <input type="text" name="username" id="username">
    <input type="button" value="Log in" id="btnDoSomething">
    </form>
    
    此外,如果用户按Enter键,则您希望执行ajax请求,然后再提交,因此此代码段也很方便:

    // If they hit the enter button, run the same method
    $('#loginForm').bind('keypress', function(e)
    {
        if (e.keyCode == 13)
        {
            $(this).find("#btnDoSomething").click();
        }
    });
    

    很好用

    这让我抓狂,没有解决方案,它要么不提交表单,要么进入无限循环提交表单。所以我把submit按钮变成了常规按钮。然后在ajax循环中提交表单。这意味着您不必担心停止submit按钮的默认操作,因为它只是一个常规按钮

    <form id="loginForm" method="post" action="login.php">
    <input type="text" name="username" id="username">
    <input type="button" value="Log in" id="btnDoSomething">
    </form>
    
    此外,如果用户按Enter键,则您希望执行ajax请求,然后再提交,因此此代码段也很方便:

    // If they hit the enter button, run the same method
    $('#loginForm').bind('keypress', function(e)
    {
        if (e.keyCode == 13)
        {
            $(this).find("#btnDoSomething").click();
        }
    });
    

    很好用

    我知道我正在寻找一条旧线索,但我最近遇到了这个问题,我想我会为任何一个偶然发现这条线索的人提供一个答案。我的解决方案是使
    $.ajax
    调用同步

    这就是我的工作原理:

    var formShouldSubmit = false;
    $("form#my_form").bind("submit", function(){
         $.ajax({
            url: "my_form_validate.php",
            data: $(this).serialize(),
            success: function(data){
                if ( data.valid ){
                    formShouldSubmit = true;
                }
                else{
                    $("#error").html('Invalid entry');
                }
            },
            async: false,
            dataType: "json"
        });
        if ( !formShouldSubmit ){
            return false;
        }
    });
    

    我知道我正在寻找一条旧线索,但我最近遇到了这个问题,我想我会为任何一个偶然发现这条线索的人提供一个答案。我的解决方案是使
    $.ajax
    调用同步

    这就是我的工作原理:

    var formShouldSubmit = false;
    $("form#my_form").bind("submit", function(){
         $.ajax({
            url: "my_form_validate.php",
            data: $(this).serialize(),
            success: function(data){
                if ( data.valid ){
                    formShouldSubmit = true;
                }
                else{
                    $("#error").html('Invalid entry');
                }
            },
            async: false,
            dataType: "json"
        });
        if ( !formShouldSubmit ){
            return false;
        }
    });
    

    @Simeon这很接近,但是如果ajax调用没有返回匹配,则需要再次单击submit按钮。我希望它在没有匹配的情况下自动提交表单(我认为这是您的意图)。当然,您必须编辑成功函数中的代码以满足您的需要。。。我在那里写了一条评论:“或者随便什么检查”,并向您展示了如何做到这一点。但是,如果你对这些问题一无所知,我可以用你在另一个问题中的特定代码来编写和编辑答案。即使我使用自己的支票,你的解决方案也不起作用$(“#myForm”).submit()不会提交表单,因为它没有正确传递
    forceSubmitForm
    值。是的。它设置forceSubmitForm=true,这使得表单在下次调用.submit()时立即提交。看看submit函数的第一行,如果forceSubmitForm变量设置为true,调用时返回true。我非常希望它能工作。可悲的是,它一秒钟也没有