2015-08-31 4 views
1

У меня есть простой мастер из трех простых шагов.jQuery Шаги и проверка нескольких панелей

В первых двух шагов, у меня есть некоторые элементы управления формы с парой выбора управления, которые обрабатываются с помощью выбранного плагина

<div class="col-lg-6 col-lg-offset-1"> 
    <label for="ExpirationMode" class="control-label">Da operazione</label> 
    <div class=""> 
     <select name="ExpirationMode" id="ExpirationMode" 
       class="chosen-select form-control" data-placeholder="Select an item" data-rule-required="true" data-msg-required="Required field"> 
      <option value=""></option> 
      @foreach (ExpirationModeViewModel e in expirationModeList) { 
       <option value="@e.ExpirationModeID">@e.Description</option> 
      } 
     </select> 
    </div> 
</div> 

со следующим JavaScript

$('.chosen-select').chosen({ 
    disable_search_threshold: 10, 
    no_results_text: 'Oops, no results found', 
    allow_single_deselect: true, 
    width: '100%' 
}); 

Для обработки проверки с выбранный плагин Я добавил следующие настройки валидатора в событии onStepChanging

onStepChanging: function (event, currentIndex, newIndex) { 
    // Disable validation on fields that are disabled or hidden. 
    form.validate().settings.ignore = ":disabled,:hidden:not('select.form-control')"; 
    // Start validation; Prevent going forward if false 
    return form.valid(); 
}, 

Проблема возникает, когда я добавляю еще один выбранный выбор во второй панели. Команда form.validate().settings.ignore = ":disabled,:hidden:not('select.form-control')"; пытается проверить также выбранные элементы, которые находятся во второй панели.

Как я могу это решить? Могу ли я сказать валидатору для проверки только элементов управления, содержащихся в текущей панели?

+0

В ваших настройках «игнорировать» вы не должны игнорировать * любые * из выбранных элементов. Тем не менее, вам все равно нужно игнорировать выбранные элементы в скрытых панелях, поэтому лучше настроить параметр 'ignore'. Должно быть достаточно простым, поэтому не уверен, как вы застряли. – Sparky

+0

Где * точно * вы положили опцию/функцию 'onStepChanging'? Вы сказали * «Я добавил следующие настройки валидатора» *, однако есть ** нет такой ** опции проверки jQuery, которая называется 'onStepChanging'. – Sparky

+0

@Sparky: Благодарю вас за ответ. Пожалуйста, извините мой бедный английский. 'OnStepChanging' является обработчиком событий из плагина jquery Steps. Я думаю, что я застрял именно в том, что я не знаю, как проинструктировать jQuery Validate, чтобы игнорировать выбранные элементы в скрытых панелях, как вы правильно указали. – Lorenzo

ответ

1

Если у вас все получится, у меня будет аналогичная проблема. Вот обходной путь, который я нашел. В onStepChanging Я добавил этот кусок кода:

if (newIndex === 1) { 
    form.validate().settings.ignore = ":disabled,:hidden:not(#partner)"; 
} else if (newIndex === 2) { 
    form.validate().settings.ignore = ":disabled,:hidden:not(#partner2)"; 
} else { 
    form.validate().settings.ignore = ":disabled,:hidden"; 
} 

Где #partner и #partner2 являются идентификаторы двух <select> элементов.

Надеюсь, что это поможет; отлично работает для меня.

+0

Спасибо. Я попытался найти более общее решение, основанное на одном селекторе, но в действительности этот был самым быстрым способом. – Lorenzo

Смежные вопросы