валидатор jQuery addMethod не работает с dropdownList

0

У меня есть 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' отлично работает. Что я делаю не так?

Буду признателен за любую помощь!

  • 0
    Какой NonEmpty метода NonEmpty , когда он выполняет ту же логику, что и required ?
  • 0
    Да, значение DDL не должно быть нулевой или пустой строкой.
Показать ещё 4 комментария
Теги:
asp.net-mvc
jquery-validate

3 ответа

1
Лучший ответ

Вам не хватает $ перед селектором ("#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>"
        }
    }
});

Демо: скрипка с требуемым правилом

  • 0
    Спасибо за ваш ответ, но проблема в том, что метод не вызывается, если я добавлю alert () внутри метода, он не появится.
  • 0
    @GyuzalRakhmayeva вы можете попытаться воссоздать проблему, используя приложенные скрипты
Показать ещё 6 комментариев
0

Если ваш крюк addMethod не регистрируется, это, скорее всего, потому, что у вас есть код внутри обработчика DOM Ready или, возможно, закрытие. Попробуйте переместить код за пределы любого лямбда; вы должны затем получить код для запуска по желанию.

См. ASP.Net MVC 3: Пользовательская ненавязчивая проверка для более подробной информации. Это характерно для "ненавязчивой" библиотеки, но рассуждения одинаковы.

0

использование

$('select[id=PeriodID] option:selected').text();

вместо

("#PeriodID").val()
  • 0
    Почему мы должны снова проверить text ? Надеюсь, что это должно быть проверено с помощью свойства value option , который равен val()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню