我有一個輸入字段,它使用jQuery自動完成方法。用戶開始鍵入用戶名稱,並獲得結果列表。一旦他選擇了一個結果,會顯示更多的輸入字段,其中包含此用戶的更多詳細信息(在後臺使用AJAX提取數據)。自動完成字段上的jQuery表單驗證
此外,自動填充字段中的所選用戶名將被複制到隱藏輸入中。我這樣做是因爲我想阻止用戶更改用戶名,而不從建議列表中選擇用戶名。我正在使用jQuery的equalTo
驗證來做到這一點。它將可見用戶名輸入字段的值與隱藏用戶名輸入字段的值進行比較。
因此,當用戶現在更改可見用戶名輸入字段的值(只需輸入),就會顯示一條通知,指出他必須從列表中選擇一個名稱。這實際上工作正常。
但是,我有一個奇怪的行爲。用戶打開表單編輯用戶。他開始輸入用戶名,並選擇一個(顯示更多輸入字段+設置隱藏輸入)。但由於某種原因,我收到通知說我必須選擇一個用戶名。只要點擊下一個字段,該錯誤就會消失。很明顯,jQuery在用戶名被選擇後不再檢查輸入。相反,它會等待按鍵或其他表單操作,以重新驗證表單。
有沒有什麼辦法,我可以強制jQuery重新驗證窗體,隱藏輸入設置後?
這是我的(縮短)jQuery代碼:如果
$(document).ready(function() {
// Autocomplete
$("#username").autocomplete({
source: function(request, response) {
$.ajax({
url: "http://localhost/users.php",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
data: {
search: request.term,
uid: "ahatius" // This value is generated server side --> It just makes the list smaller by just selecting users relevant to this administrator
},
success: function(data) {
response($.map(data.persons, function(item) {
return {
label: item.username + " (ID: " + item.uid + ")",
value: item.username,
username: item.username,
groupnumber: item.groupnumber
}
}));
}
});
},
minLength: 0,
// Write input values
select: function(event, ui) {
$("#checkUsername").val(ui.item.username);
$("#groupnumber").val(ui.item.groupnumber);
showAll(); // This just shows all other input fields, isn't relevant
}
})
// Validation
$("#useredit").validate({
rules: {
username: {
equalTo: "#checkUsername"
},
groupnumber: {
required: true,
minlength: 2,
number: true
}
},
messages: {
cnAntragsteller: {
equalTo: "Please select a user from the dropdown!"
},
groupnumber: {
required: "You need to specify a group number!",
minlength: "The specified group number is too short!",
number: "You have to specify a numeric value!"
}
},
errorPlacement: function ($error, $element) {
var name = $element.attr("name");
$("#" + name + "Error").append($error);
}
})
})
我試過的有效的()方法,似乎不工作(也它會觸發其他所有輸入驗證)。謝謝你的提示。我會看看這些屬性。 – Ahatius 2012-07-10 08:07:39
是的,該函數驗證整個表單(這是你的問題?)無論如何,我編輯我的答案,並請看看,看看它是否有幫助。 – Willy 2012-07-10 09:23:43
這是一個「問題」,因爲我希望它在提交按鈕被按下時進行驗證。在此之前,表單應該沒有錯誤信息。我說得沒錯,你的代碼會在焦點丟失後立即驗證每個字段?是否有可能只爲一個領域而不是每個領域做到這一點? – Ahatius 2012-07-11 04:54:30