我有一個我正在工作的表單和我的驗證JavaScript(jQuery & jQuery驗證插件)工作,直到一個點。我已經設置了一個jsfiddle來顯示它處於工作狀態:http://jsfiddle.net/5Ukv2/errorPlacement參數打破jQuery驗證插件
但是,當我使用errorPlacement函數/參數時,它會中斷。錯誤發生在我指定的位置,但是當我更新輸入(即任何按鍵)時,會添加多個錯誤,並且當條目根據JavaScript有效時,錯誤不會從我的HTML中刪除:http://jsfiddle.net/5Ukv2/1/
另外,只要我輸入到輸入字段中,驗證就開始發生;與額外的和未消除的錯誤元素相比,這個問題很小。
我在做什麼錯?
下面附上代碼以供參考以及jsfiddles。我評論了幾個方法,因爲他們正在進行ajax調用,而這些調用在這裏不起作用,但驗證的行爲相同。
HTML:
<form action="email_submit.php" method="post" name="enterForm" id="enterForm"> <label for="email">Enter your email to play: <input type="text" name="email" id="email" value="" /> <input type="submit" value="Enter" name="submit" class="submit" /> </form>
的JavaScript:
// JavaScript Document
$(function(){
$("#enterForm").validate({
rules: {
email: {
email: true,
required: true,
remote: {url:"email_valid.php", async:false}
}
},
messages:{
email:{
email: "Please enter a valid email address",
required: "Please enter an email address",
remote: "That is not a valid domain"
}
},
submitHandler: function(form) {
var formData = $('form').serialize();
$.ajax({
type: 'POST',
url: "email_submit.php",
data: formData,
success: function(data){
if(data.subscriber && data.valid_email)
window.location = "calendar.html";
else if(!data.valid_email)
alert("Please enter a valid email");
else if(!data.subscriber)
alert("Open sign up form");
},
error: function(data){
alert("e:" + data);
console.log(data);
},
dataType: "JSON"
});
return false;
},
errorPlacement: function (error, element){
if( element.attr("name") == "email"){
error.insertAfter("#enterForm");
}
else
error.insertAfter(element);
}
});
});
太謝謝你了!你知道爲什麼我點擊提交之前驗證嗎?插件文檔頁面說:「在一個字段被標記爲無效之前,驗證是懶惰的:在第一次提交表單之前,用戶可以通過字段選項而不會收到令人討厭的消息 - 他沒有得到機會實際輸入正確的值「 – trismi
我也很困惑。它曾經像文檔說的那樣工作。我認爲這可能是插件中最近發生的變化 - 無論是錯誤,還是他沒有更新文檔。 – Barmar