2011-12-18 79 views
2

我寫了一個用於驗證表單的jquery插件。它將自身綁定到$('element')。提交事件來觸發驗證(綁定在插件內部)。不知怎的,像這樣:jquery,綁定次序/等待回調

// pseudocode 
jquery.rdy { 
     $('form').validate(); //binding the plugin 
} 

裏面的驗證插件的我綁定驗證,以提交

//pseudocode 
[...] 
$().submit(function() { 
    validating... //returning true/false 

    if (false) { 
     return false //prevent submit form 
    } 
} 
[...] 

所以,現在我的問題是如何綁定(在其他JS腳本爲例)其他的東西提交,但只是驗證完成。

所以這樣

$('form').submit(function() { 
    if (validate plugin was executed) { 
     //do stuff like check if validation was returning a true and now do something else 
    } 
} 

希望我descriped是正確的......我的英語不是最好的,但我tryed是混凝土S可能的(我希望,僞代碼是一個正確的方法爲好)

//編輯:使問題更具體: 我試圖弄清楚一種方法來解決以下問題:(它非常出於上下文,但問題恰恰在那裏) 我有一個提交事件,這取決於在另一個decleration中觸發的某些代碼。

$('element').submit(function() { 
    if ($(this).hasClass('foo')) { 
     // do something 
    } 
}); 

$('element').submit(function() { 
    $(this).addClass('foo'); 
}); 

而現在第一個函數什麼都不做,因爲它已經在第二個函數之前被觸發。有沒有一個乾淨的方法來解決這個問題。也許我需要一個超時事件(即使我討厭他們)?

回答

0

您可以使用自定義名稱將更多函數綁定到表單元素。

$('form').bind('after_validation',function(){ console.log('hello'); }); 

,並引發他們在你提交表單功能,當你需要它:

$('form').trigger('after_validation'); 

​​


更新:

你不能查請按照您綁定的提交事件的順序,而不刪除它們並按照正確的順序重新應用.unbind('submit')。你可以做的是使用自定義綁定(見上),並在需要時準確觸發它們 - 比如在提交函數中。

$('form').submit(function() { 
    //run validation 
    $('form').trigger('validation'); 

    //did it pass validation? 
    if($(this).data('invalid')){ 
     console.log('did not pass validation'); 
     return false; 
    } 

    //passed validation - submit the form 
    return true; 
}); 

//add validation to the "form" 
$('form').bind('validation',function() { 

    //do validation on form... 

    if(false){ 
     $(this).data('invalid',true); 
    } 
}); 



//add another validator to the form, etc. 
$('form').bind('validation',func... 

即時通訊使用.data()存儲變量對「形式」元素,以便您可以訪問它們環比下滑。

這是你需要的基礎,可以應用到自定義的jquery插件來形成自定義的命名函數。例如。 $().validator()

http://docs.jquery.com/Plugins/Authoring

+0

是這會工作,但後來我需要做的聲明我在這一切的聲明「經過驗證「功能。我不想要那樣的東西(想起js的調用函數)。 我想要一個正常的提交事件做我的東西。但只是我想確定這個提交事件是在一些東西完成時執行的(在我的情況下,我的確認插件完成了他的工作)。所以我可以做一些事情,比如向我的插件添加一個「無效」類到表單中,並在第二次提交事件中檢查它,例如「if!hasclass(invalid)」,但是如果總是爲true,因爲表單不具有無效原因,插件被執行到晚期 – user1104419 2011-12-18 15:59:22

+0

我編輯了我的問題,使其更容易理解 – user1104419 2011-12-18 16:22:32

+0

請參閱上面的更新 – 2011-12-20 09:40:57

1

如果您正在使用jQuery.Validate(它看起來像你同在。驗證()語法),你可以調用isValid()的方法:

if (validate plugin was executed) { 

然後可以

if ($('form').isValid()) { 
+0

是的,我可以做這樣的事情來驗證表單,然後用我的插件。但我不想在那裏驗證。因爲表單無論如何都得到了驗證,因爲它應該通過插件內的觸發器form.submit函數進行驗證。但重點是......通過插件的驗證過程開始遲到。簡單地說 - 我有兩個綁定提交,但我想確保驗證插件是第一次然後其他開始。所以我想有一個如果第二次提交內部綁定查找,如果驗證之前完成。嗯很難用英文描述,但我希望你能找到我! – user1104419 2011-12-18 15:47:50

+0

我編輯了我的問題,使其更容易理解 – user1104419 2011-12-18 16:22:42