2017-01-26 119 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; 
     } 
    }); 
}); 
相關問題