2010-09-20 3 views
9

У меня есть Webform, работающий с расширением LiveValidation. У меня есть условное правило: если пользователь выбирает Соединенные Штаты, то поле State-or-province должно быть в списке сокращений состояний.LiveValidation .remove не работает

Моя проблема заключается в том, что если пользователь выбирает Соединенные Штаты, а затем возвращается и изменяет свой ответ, правило валидации должно быть удалено, чтобы они могли вводить любую старую текстовую строку. Я в четыре раза проверил свой синтаксис, и функция возвращает объект 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."}); 
       } 
      }); 
+0

У меня возникает эта проблема. Из-за этого вынуждены отказываться от LiveValidation :( – benr75

+0

Используйте firebug для просмотра возможных ошибок Javascript. Есть ли ошибки js? – sergzach

ответ

4

Возможно слишком поздно, чтобы ответить на этот вопрос, но здесь идет ...

Документация LiveValidation.remove гласит: «Вы должны передать его ТОЧНО те же аргументы, как вы используется для добавления проверки ». Хотя функция проверки (Validate.Inclusion) одинакова, объект параметров будет отличаться каждый раз. Не имеет значения, что он «выглядит» одинаково (т. Е. Результат должен сравнивать результат каждого свойства между добавленным вами объектом и тем, который вы удалили), это означает, что он должен быть одним и тем же объектом. Единственный способ обеспечить это - переместить объявление объекта параметров за пределами обратного вызова, в котором вы манипулируете объектом проверки, так что он создается только один раз, а не каждый раз, когда вызывается обратный вызов.

Вот код (я переименовал ваши идентификаторы, BTW). Я также убедился, что проверка проверки может быть добавлена ​​только один раз.

$(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; 
     } 
    } 
}); 

}); 
Смежные вопросы