2011-09-16 29 views
2

我有一個表單有多個.submit驗證。我想註冊一個處理程序,如果集體結果是錯誤的,可以做些事情。我可以得到多個.submit()處理程序的集體結果嗎?

這是一個非常簡單的代碼片段,說明我想做些什麼......

$("#myForm").submit(function() { 
    if (conditionA) 
    { 
     return true; 
    } 
    else { 
     return false; 
    } 
}); 

$("#myForm").submit(function() { 
    if (conditionB) 
    { 
     return true; 
    } 
    else { 
     return false; 
    } 
}); 

    // TODO: Have some event here that knows if Collective result of .submit was true or false 
    $("#myForm").submitParentHandler(function (collectiveResult) { 
     if (collectiveResult) { 
      alert("Form will be submitted"); 
     } 
     else { 
      alert("Form will NOT be submitted"); 
     } 
    }); 

當最後一個方法是目前存在的,我想什麼只是一個嘲弄了例子。

回答

4

我認爲你只需要重新構建解決方案。相反,註冊多個提交處理程序,而不是註冊包含驗證邏輯,像這樣的方法:

var submitHandlers = []; 

$('#myForm').submit(function() 
{ 
     var isValid = true; 
     $(submitHandlers).each(function() 
     { 
      isValid = isValid && this(); 
     }); 

     return isValid; 
}); 

,那麼只需在登記的驗證方法來調用:

submitHandlers.push(function() 
{ 
     return conditionA; 
}); 

submitHandlers.push(function() 
{ 
    return conditionB; 
}); 

點擊提交時,它會貫穿submitHandlers中的所有方法,如果它們都返回true,則可以繼續。如果返回false,則會從提交處理程序返回false。

+0

這是我實施它的方式。問題是第二個提交處理程序可能不會完全運行或運行,原因是當第一個提交處理程序返回true時頁面被導航離開。 –

+0

@Tejs。一個非常好的答案,我會給它一個鏡頭。 – Justin

+0

謝謝@Tejs!像魅力一樣工作。 – Justin

相關問題