2013-02-19 52 views
1

我有什麼似乎是一個簡單的任務,但我無法弄清楚如何去做。清理jQuery之前的數據用addMethod驗證

我有一個表單驗證與jQuery驗證插件。我有一個自定義驗證,用於驗證您在text/textarea字段中具有所有有效的ascii字符,並且使用$ .validator.addMethod()功能將它與類「ascii」綁定到任何字段。

我的問題是,我想保持驗證,但我也有一個單獨的簡短的JavaScript函數清理那些垃圾字符。我想在驗證輸入框中運行清理,並認爲它是無效的。

我試圖把清理放入驗證方法之前,它返回true或false,沒有工作。我嘗試將它綁定到模糊事件,這沒有奏效。

將它綁定到keyup事件工程,但我覺得這是一個黑客攻擊。我只是想讓它做到這一點,並將其與驗證綁定在一起,以便在驗證該字段的有效性之前知道要進行清理。

我發現一個jQuery的擴展名爲bindFirst這裏:How to order events bound with jQuery

,並試圖結合清理「第一」的模糊事件,但沒有奏效。

我想我可以使用「依賴」功能來拉取我需要的東西,但是在使用自定義驗證時這似乎不是一個選項。

在我提到的所有場景中,它確實執行了清理,但直到它已經抱怨該字段無效。只需返回現場並退出即可擦除錯誤消息。

任何幫助,將不勝感激。

+0

顯示密碼... – Sparky 2013-02-19 20:25:43

回答

1

您只需要使用Validate插件的內置回調函數之一即可。如果你想使用onfocusout,那麼修改默認的onfocusout回調函數。

默認onfocusout回調

onfocusout: function(element, event) { 
    if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) { 
     this.element(element); 
    } 
} 

建議用法

注意如何以不與其他干擾領域的核心功能被保留。

$(document).ready(function() { 

    $('#myform').validate({ // initialize the plugin 
     // rules & options, 
     onfocusout: function (element, event) { 
      if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) { 
       if (element.name == "yourfield") { 
        // your code to do cleanup on name="yourfield" 
       } 
       this.element(element); // <-- this triggers validation on the field 
      } 
     } 
    }); 

}); 

工作演示:http://jsfiddle.net/WTjTy/

演示將觸發一個模擬的「清理」,則顯示之前的任何錯誤,在指定input場的模糊。

+0

這樣做。非常感謝! – MoDiggity 2013-02-19 21:19:15