2012-06-19 144 views
3

我有一個簡單的登錄表單,並有jQuery驗證替換字段標籤,當有錯誤顯示。問題是,一旦錯誤被清除,標籤消失。我想找到一種方法來恢復到以前的標籤的內容,或重建標籤時字段是合法的......jQuery驗證:驗證後保留錯誤

這裏是我的代碼:

$(document).ready(function(){ 
    $("#login").validate({ 
     errorPlacement: function(error, element) { 
      element.prev().replaceWith(error); 
     }, 
     rules: { 
      "email": { 
       required: true, 
       email:true, 
      }, 
      "password": { 
       required: true, 
       minlength: 6 
      } 
     }, 
     messages: { 
      email: { 
       required: "Please enter your email address.", 
       email: "Please enter a <u>valid</u> email address" 
      }, 
      password: { 
       required: "Please enter your password.", 
       minlength: "Please enter a password with 6 characters or more." 
      } 
     }, 
    }); 
}); 

和HTML:

<form name="login" id="login" method="post" action="authenticate.php"> 
<p> 
    <label for="email">Email Address:</label> 
    <input type="text" name="email" id="email" class="required email" /> 
</p> 
<p> 
    <label for="password">Password:</label> 
    <input type="password" name="password" id="password" class="required" /> 
</p> 
<p> 
    <input type="submit" value="Log In" id="submit" /> 
</p> 

在本質上,當用戶提交表單,如果有在電子郵件字段中沒有數據,那麼對於電子郵件標籤獲取與錯誤所取代。但一旦它有了有效的輸入,我想要放回原始標籤。

在此先感謝您的任何建議,

ž

+0

這是不可能的,但你可能會反覆折騰'highlight'和'unhighlight'功能,並從這些保存關閉舊標籤,並將其重新設置爲「unighighlight」。 – Ryley

+0

感謝您的回覆。我實際上已經做出了一個妥協,而不是用錯誤標籤替換之前的標籤,而是使用error.appendTo(element.prev())和errorElement:「span」將跨度添加到該標籤中。 這並不理想,但至少出現跨度時,錯誤代碼就是我想要的位置,當它消失時,標籤保持不變。 我剛剛做了這樣的標籤和錯誤完成彼此像句子...例如,「電子郵件地址」「是必需的。」或「電子郵件地址」的格式不正確。「 (PS:很遺憾,看起來換行符不起作用) – Shikarnov

+0

啊,這是一個體面的解決方案,我同意......我建議你發佈一個自己問題的答案,並將其標記爲已接受(這是100 %確定在StackOverflow)。這樣任何發現這個問題的人都會知道一個很好的答案。 – Ryley

回答

3

我實際上已經做出妥協,而不是用錯誤標籤替換之前的標籤,而是使用error.appendTo(element.prev())和errorElement:「span」在該標籤中添加跨度。下面是新的代碼:

  $(document).ready(function(){ 
      $("#login").validate({ 
       errorElement: "span", 
       errorPlacement: function(error, element) { 
        error.appendTo(element.prev()); 
        //element.prev().replaceWith(error); 
       }, 
       rules: { 
        "email": { 
         required: true, 
         email:true, 
        }, 
        "password": { 
         required: true, 
         minlength: 6 
        } 
       }, 
       messages: { 
        email: { 
         required: " is Required", 
         email: " is Improperly Formatted" 
        }, 
        password: { 
         required: " is Required", 
         minlength: " is not Long Enough" 
        } 
       }, 
      }); 
     }); 

這是不太理想,但至少跨度出現時,錯誤代碼是我希望它是,當它消失,標籤保持完好。我只是這樣做的,所以標籤和錯誤完成彼此像句子...例如,「電子郵件地址」「是必需的。」或「電子郵件地址」的格式不正確。「

感謝大家,在這裏做出了貢獻,

ž

+0

您可以接受您自己的答案以供將來參考。 –

0

你可以嘗試removeChild之(標籤),並附加一個新的給它的錯誤ACCUR時。切換標籤似乎讓SENCE

+0

感謝您的回覆。我的部分問題似乎是無法將相關代碼放入錯誤清除時觸發的函數中。 – Shikarnov

1

您可以刪除

errorPlacement: function(error, element) { 
     element.prev().replaceWith(error); 
    }, 

和消息應該出現在文本框旁邊來代替。

+0

這裏面臨的挑戰是我希望它完全出現在標籤所在的位置 - 不在文本框的旁邊或下方。 – Shikarnov