2009-10-26 34 views
0

我使用的jQuery驗證插件的方式與Remember The Milk demo非常相似。爲什麼使用jQuery(遠程)驗證時,錯誤消息中顯示錯誤的字段值?

$("#registrationForm").validate({ 
    rules: {  
    email: { 
     required: true, 
     email: true, 
     remote: '<%=Url.Action(...) %>' 
    },   
    }, 
    messages: { 
    email: { 
     required: "Please enter an email address", 
     email: "Please enter a valid email address", 
     remote: jQuery.format("{0} is already in use") 
    } 
}); 

第一次提交無效的電子郵件(例如[email protected])時,錯誤消息如預期。但是,如果我輸入另一個無效電子郵件(例如[email protected]),則驗證插件仍會顯示「[email protected]已被使用」。

我跟蹤了到達Url.Action調用中指定的控制器的參數,它們絕對正確(即,當在該字段中輸入「[email protected]」作爲電子郵件地址發送時)。

有沒有其他人遇到這個或類似的問題,使用jQuery驗證插件?

回答

1

Remember the Milk演示中的用戶名字段以相同的方式失敗(當輸入用戶名'Peter'和'George')時,所以您可能在插件中發現了一個錯誤。

+0

哦..感謝我不確定我可以使用哪些項目來測試,以使錯誤與他們發生。 – Jedidja 2009-10-26 20:40:26

2

在兩年後和錯誤似乎仍不是固定的,所以這裏是我的發現:

的問題是在remote功能:

remote: function(value, element, param) { 
    if (this.optional(element)) 
     return "dependency-mismatch"; 

    var previous = this.previousValue(element); 
    if (!this.settings.messages[element.name]) 
     this.settings.messages[element.name] = {}; 
    previous.originalMessage = this.settings.messages[element.name].remote; 
    this.settings.messages[element.name].remote = previous.message; 

    // snip more code... 
} 

麻煩的是,在第二次和以後對此功能的評估,messages[element.name].remote包含特定的(文本)錯誤消息,並且previous.originalMessage之後被覆蓋時,原始消息永遠丟失。

我能夠在該行之前增加一個檢查解決此問題:

if (!previous.originalMessage) 
    previous.originalMessage = this.settings.messages[element.name].remote; 

我不知道這是否是真的正確解決方案,但它的工作原理 - 驗證失敗,現在重新申請每個驗證失敗的格式函數。

+0

不知道是誰給了-1。這個解決方案有效 – madhairsilence 2012-07-04 08:18:27

相關問題