2010-05-04 78 views
7

我目前正在設置jQuery驗證插件以供我們的項目使用。在jQuery驗證插件中自定義事件委託

默認情況下,會自動設置一些事件進行處理。即重點進/出,關鍵所有輸入火災驗證事件。我希望它只在點擊提交按鈕時觸發。

此功能似乎內置於插件中,這使得難以做到這一點(不修改插件代碼,不是我想做的事)。

我發現在插件代碼原型方法eventDelegate函數調用:

 $(this.currentForm) 
      .validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate) 
      .validateDelegate(":radio, :checkbox, select, option", "click", delegate); 

當我刪除從插件獲取我的結果,這些線,但是我更願意做的事情外插爲了實現這一點。

任何人都可以幫我嗎?如果您需要更多詳情,請告訴我。我搜索了谷歌,並取得了一些成功。

感謝

編輯: 我基本上是試圖驗證只有在提交事件被觸發形式。默認情況下,插件每次在輸入控件中丟失焦點時都會進行驗證。

回答

7

找到了答案。它作爲驗證方法中的選項的一部分被隱藏起來。

看到這個頁面上onfocusout在等選項: http://docs.jquery.com/Plugins/Validation/validate#options

,我可以設置爲false。

這裏是我的代碼,建立了我的驗證(希望其他人會發現這很有用):

$(document).ready(function() { 
    $("form").each(function() { 
     $(this).validate({ 
      validateDelegate: function() { }, 
      onsubmit: true, 
      onkeydown: false, 
      onkeyup: false, 
      onfocusin: false, 
      onfocusout: false, 

      errorContainer: "#PanelError", 
      errorLabelContainer: "#PanelError ul", 
      wrapper: "li", 
      ignoreTitle: true, 
      errorClass: "Error", 

      highlight: function(element, errorClass, validClass) { 
       $(element).addClass(errorClass).removeClass(validClass); 
       $(element.form).find("#" + element.id) 
         .addClass(errorClass); 
      }, 
      unhighlight: function(element, errorClass, validClass) { 
       $(element).removeClass(errorClass).addClass(validClass); 
       $(element.form).find("#" + element.id) 
         .removeClass(errorClass); 
      } 
     }); 
    }); 
}); 
相關問題