С помощью каждого метода в плагине Validate правила просто проходят/сбой. Когда они терпят неудачу, вы получаете сообщение; когда они проходят, нет сообщения. return true
по вашему пользовательскому методу, и вы прошли (нет сообщения) ... return false
, и вы терпите неудачу (сообщение).
В плагине по умолчанию «составные правила» обрабатываются несколькими методами. Следующее «соединение правило» обрабатываются с четыре методов, например ...
rules: {
myfield: {
required: true,
digits: true,
minlength: 5,
email: true
}
}
Однако, вы пытаетесь сделать «соединение правила» с одним методом.
Итак, логичным решением является то, что вы просто сделаете это как плагин; с двумя уникальными пользовательскими методами. Я предпочитаю эту методологию, потому что нам вообще не нужно вмешиваться в размещение сообщений. И вот как все «сложные» правила уже обрабатываются плагином внутри.
jQuery.validator.addMethod("feedvalid", function(value, element) {
//Ajax call here which returns
var retMsg = ajax()
if (retMsg == "one") {
return false; // failed, show message
} else {
return true;
}
}, "not a valid url");
jQuery.validator.addMethod("feedreach", function(value, element) {
//Ajax call here which returns
var retMsg = ajax()
if (retMsg == "2") {
return false; // failed, show message
} else {
return true;
}
}, "not a reachable url");
Моделирование: http://jsfiddle.net/At555/
Введите one
или 2
в поле ввода "имитировать" ваш Аякса.
«Гадкий» подход:
В качестве альтернативы, вы должны создать & разместить собственное сообщение контейнер отдельно от контейнеров по умолчанию контролируемых плагином. Вам также понадобится логика, которая стирает сообщение каждый раз, когда поле проходит проверку. Это решение работает, но оно очень нетрадиционное, поэтому я не предпочитаю его.
jQuery.validator.addMethod("feed", function(value, element) {
//Ajax call here which returns
var retMsg = ajax()
if (retMsg == "one") {
$('#myErrContainer').text("not valid url");
return false; // failed
} else if (retMsg == "2") {
$('#myErrContainer').text("not reachable url");
return false; // failed
} else {
$('#myErrContainer').text();
return true; // passed
}
}, "");
Моделирование: http://jsfiddle.net/vnpG4/
Введите one
или 2
в поле ввода "имитировать" ваш Аякса.