LiveValidation . Удалить не работает
У меня есть веб-форма, работающая с расширением LiveValidation. У меня есть условное правило, что если пользователь выбирает Соединенные Штаты, то поле "Штат или провинция" должно быть в списке сокращений штатов.
Моя проблема в том, что если пользователь выбирает Соединенные Штаты, а затем возвращается и меняет свой ответ, правило проверки должно быть удалено, чтобы он мог ввести любую старую текстовую строку. Я четыре раза проверил свой синтаксис, и функция возвращает объект liveValidation, а не объект ошибки, но правило не удаляется. Любой совет будет принята с благодарностью.
Вот сценарий:
if($('#edit-submitted-state-or-province').length){
var field12 = new LiveValidation('edit-submitted-state-or-province', { validMessage: " ", onlyOnBlur: true });
field12.add( Validate.Presence, { failureMessage: "Please enter your state or province." } );
}
$('#edit-submitted-country').change(function() {
var stateList = new Array("","AK"..."WY");
if($("#edit-submitted-country").val() == "United States"){
field12.add( Validate.Inclusion, {within: stateList, failureMessage: "Please enter a valid 2-letter state abbreviation."});
}
else{
field12.remove( Validate.Inclusion, {within: stateList, failureMessage: "Please enter a valid 2-letter state abbreviation."});
}
});
1 ответ
Наверное, слишком поздно, чтобы ответить на этот вопрос, но здесь идет...
В документации к LiveValidation.remove говорится, что "вы должны передавать ТОЧНО те же аргументы, которые вы использовали для добавления проверки". Хотя функция проверки (Validate.Inclusion) одинакова, объект параметров каждый раз будет отличаться. Неважно, что он "выглядит" одинаково (то есть, если вы сравниваете значение каждого свойства между добавленным и удаленным объектом), это означает, что это должен быть один и тот же объект. Единственный способ убедиться в этом - переместить объявление объекта параметров за пределы обратного вызова, где вы манипулируете объектом проверки, чтобы он создавался только один раз, а не каждый раз при вызове обратного вызова.
Вот код (я переименовал ваши идентификаторы, кстати). Я также убедился, что проверка может быть добавлена только один раз.
$(function() {
var field12,
added = false,
stateList = ["", "AK", "CO", "WY"]; // etc
params = {
within: stateList,
failureMessage: "Please enter a valid 2-letter state abbreviation."
};
if ($('#state').length) {
field12 = new LiveValidation('state', {
validMessage: " ",
onlyOnBlur: true
});
field12.add(Validate.Presence, {
failureMessage: "Please enter your state or province."
});
}
$('#country').change(function() {
if ($("#country").val() == "United States") {
if (!added) {
field12.add(Validate.Inclusion, params);
added = true;
}
}
else {
if (added) {
field12.remove(Validate.Inclusion, params);
added = false;
}
}
});
});