У меня есть DropDownListFor, на мой взгляд:
@Html.DropDownListFor(model => model.PeriodCode,..., new { name = "Period", id = "PeriodID"})
И моя проверка следующим образом:
jQuery.validator.addMethod('NonEmpty', function (value) {
return ($("#PeriodID").val() != "");
}, '');
jQuery("#form").validate({
rules: {
Year: {
required: true
},
Period: {
NonEmpty: true
}
},
messages: {
Year: {
required: "<div style='color:red'>Message 1 </div>"
},
Period: {
NonEmpty: "<div style='color:red'>Message 2 </div>"
}
}
});
Проблема в том, что функция jQuery AddMethod
не вызывается, когда я отправляю свою форму, поэтому мой DropDownList
не проверяется. Однако проверка для TextBox
с именем 'Year'
отлично работает. Что я делаю не так?
Буду признателен за любую помощь!
Вам не хватает $
перед селектором ("#PeriodID")
.
jQuery.validator.addMethod('NonEmpty', function (value) {
return ($("#PeriodID").val() != "");
}, '');
Демо: скрипка
В любом случае правило валидатора должно быть похоже: правило не должно жестко закодировать какой-либо элемент, оно должно проверять переданное ему значение
jQuery.validator.addMethod('NonEmpty', function (value, elem, args) {
return value != "";
}, '');
Демо: скрипка
Примечание. Нет необходимости добавлять такое правило, поскольку оно может быть достигнуто с использованием required
правила
Обновление: имя поля Period
не является PeriodCode
jQuery("#form").validate({
rules: {
Year: {
required: true
},
PeriodCode: {
NonEmpty: true
}
},
messages: {
Year: {
required: "<div style='color:red'>Message 1 </div>"
},
PeriodCode: {
NonEmpty: "<div style='color:red'>Message 2 </div>"
}
}
});
Демо: скрипка с требуемым правилом
Если ваш крюк addMethod не регистрируется, это, скорее всего, потому, что у вас есть код внутри обработчика DOM Ready или, возможно, закрытие. Попробуйте переместить код за пределы любого лямбда; вы должны затем получить код для запуска по желанию.
См. ASP.Net MVC 3: Пользовательская ненавязчивая проверка для более подробной информации. Это характерно для "ненавязчивой" библиотеки, но рассуждения одинаковы.
использование
$('select[id=PeriodID] option:selected').text();
вместо
("#PeriodID").val()
text
? Надеюсь, что это должно быть проверено с помощью свойства value
option
, который равен val()
NonEmpty
методаNonEmpty
, когда он выполняет ту же логику, что иrequired
?