Возможно, слишком поздно, чтобы ответить на этот вопрос, но здесь идет ...
Документация для 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;
}
}
});
});