2017-01-26 196 views
1

我使用jQuery验证具有回调submitHandler的插件。在该回调中,如果返回false,则会中止提交,如果返回true,则使用post方法进行提交。Javascript返回true或false来从另一个函数回调

$("#collection_form").validate({ 

    submitHandler: function(form) { 

     pre_ajax_submit(function (pre_ajax_return) { 

      if (pre_ajax_return == 'non_ajax') { 
       //something 
      } else { 
       //other 
      } 
     }); 
    } 
}); 

所以我的问题是:我有一个函数在回调pre_ajax_submit()。我如何在主回调函数中返回true或false。我想达到与此相同的结果:

$("#collection_form").validate({ 

    submitHandler: function(form) { 
     return true; 
    } 
}); 
+1

'pre_ajax_submit()'带给聚会什么? –

+0

这是来自ajax调用的另一个回调,它应该带来true或false需要去submitHandler,但我不知道如何做到这一点 – user1529918

+1

是'pre_ajax_submit'异步?如果是这样,你根本就没有机会。您需要发布'pre_ajax_submit'的代码以获取完整答案 –

回答

0

简单地颠倒执行顺序。验证表单后的预AJAX任务完成:

pre_ajax_submit(function (pre_ajax_return) { 
    if (pre_ajax_return == 'non_ajax') { 
     //something 
    } else { 
     //other 
    } 

    $("#collection_form").validate({ 
     submitHandler: function(form) { 
      return true; 
     } 
    }); 
}); 

我猜你可能有很多其他的事情在你的代码发生。你应该考虑使用Promises:

var whenPreAJAXFinished = new Promise(function(resolve, reject){ 
    pre_ajax_submit(function (pre_ajax_return) { 
     if (pre_ajax_return == 'non_ajax') { 
      //something 
     } else { 
      //other 
     } 
     resolve() 
    }) 
}) 

whenPreAJAXFinished.then(function(){ 
    $("#collection_form").validate({ 
     submitHandler: function(form) { 
      return true; 
     } 
    }); 
}); 
相关问题