Попробуйте установить пользовательское сообщение проверки с помощью jQuery Remote
У меня есть форма a со следующей настройкой проверки:
$('#form').validate({
onfocusout: false,
onkeyup: false,
onclick: false,
success: function (){
$('#username').addClass('input-validation-confirmation');
}
});
$('#username').rules("add", {
onfocusout: false,
onkeyup: false,
required: true,
email: true,
remote: {
url: function,
type: 'GET',
dataType: 'json',
traditional: true,
data: {
username: function () {
return $('#username').val();
}
},
dataFilter: function (responseString) {
var response = jQuery.parseJSON(responseString);
currentMessage = response.Message;
if (response.State == 0) {
currentMessage = currentMessage + 0;
return false;
}
return 'true';
},
beforeSend: function (response) {
showLoadingIndicator($('#username'));
},
complete: function () {
hideLoadingIndicator($('#username'));
}
}
});
то, что это пытается сделать, - использовать те же элементы проверки (для работы с некоторой другой платформой), чтобы показать как ошибки, так и методы успеха.
моя проблема заключается в том, что метод успеха моего правила запускается до завершения удаленной проверки. Я попытался установить сообщение несколькими способами, но параметр custom messages, похоже, не вызывается при успешном выполнении проверки.
кто-нибудь знает о других методах использования поля ошибки проверки как для сообщений об успехе, так и для сообщений об ошибках при использовании сочетания правил проверки удаленных и шаблонов?
Edit:
теперь я понимаю, что ожидал успешного события в неподходящее время. Мне нужно событие, которое запускается после завершения проверки (не отправлено). Есть ли такое событие?
3 ответов
ваш код...
$('#username').rules("add", {
onfocusout: false,
onkeyup: false,
required: true,
email: true,
remote: { ... },
messages: { ... },
success: function (label) { ... }
});
проблема здесь в том, что onfocusout
, onkeyup
и success
не "правила". Только отдельные "правила" и messages
опция может быть размещена внутри .rules('add')
метод.
$('#username').rules("add", {
required: true,
email: true,
remote: { ... },
messages: {
remote: "custom remote message"
}
});
см. документацию для .rules()
метод:http://jqueryvalidation.org/rules
onfocusout
, onkeyup
и success
являются "параметры", которые идут только внутри .validate()
метод, который только прикреплены к <form>
элемент.
насколько" пользовательское " сообщение для remote
: согласно docs, это сообщение об ошибке автоматически будет сообщение, возвращаемое от сервера... нет никакой специальной настройки.
изменить в комментарии и обновил ОП:
код:
$('#form').validate({
onfocusout: false,
onkeyup: false,
onclick: false,
success: function (){
$('#username').addClass('input-validation-confirmation');
}
});
вы заявили, " тем не менее, с обновленным кодом (см. выше) я никогда не вижу события успеха."
ты отключены все события в этой форме. Единственным событием, оставшимся для запуска проверки в этом поле, является нажатие кнопки Отправить. Именно!--45-->, когда вы ожидаете "увидеть"success
выстрелить?
демо: http://jsfiddle.net/xMhvT/
другими словами, submit
это единственное событие, оставшееся для запуска теста проверки, когда вы отключили все остальные события.
редактировать на основе другого обновления OP:
success
не является "событием". "Событие" - это click
, blur
, keyup
, etc. (onkeyup
, onfocusout
и onclick
параметры управления событиями для этого плагина)
success
- это "функция обратного вызова". "Функция обратного вызова" - это то, что происходит на событие.
• Если вам нужна "функция обратного вызова", которая срабатывает каждый раз, когда поле проходит проверку, вы можете использовать success
.
• Если вам нужна "функция обратного вызова", которая срабатывает, когда форма проходит проверку, вы можете использовать submitHandler
. Однако это также происходит, когда форма представляется.
• если вы хотите "протестировать" вся форма или одно поле, чтобы узнать, действительна ли она без отправки формы, вы можете использовать .valid()
"метод".
$('#username').valid(); // for one field
// or
$('#form').valid(); // for the whole form
// you can also...
if ($('#form').valid()) {
//do something if form is valid
}
этот метод запустит тест (покажет сообщение) и вернет логическое значение.
использовать remote
, dataFilter
и messages
параметры так:
var message = 'Default error message';
$('form').validate({
rules: {
element1: {
remote: {
url: '/check',
type: 'post',
cache: false,
dataType: 'json',
data: {
element2: function() {
return $('.element2').val();
}
},
dataFilter: function(response) {
response = $.parseJSON(response);
if (response.status === 'success') return true;
else {
message = response.error.message;
return false;
}
}
}
}
},
messages: {
element1: {
remote: function(){ return message; }
}
}
});
Я поздно, чтобы ответить на этот вопрос, но я думаю, что это может помочь другим:
в вашем PHP просто нужно добавить следующее
if($rows_matched==1){
echo (json_encode(false));
}
else{
echo (json_encode(true));
}
и в ваших JS код писать followiing: $(function () {
$('#product_add').validate({
rules:{
product_sku:{
remote:{
url:'check.php',
type:'POST'
}
}
},
messages:{
product_sku:{
remote:'already in database'
}
}
});
});