Jquery Validator — проверка входных данных по списку принятых значений

#jquery #validation

#jquery #проверка

Вопрос:

Обычно я бы просто сделал это с помощью выпадающего списка, но клиент запросил, чтобы это был текстовый ввод…

В принципе, я хотел бы использовать Jquery validator для проверки того, что пользователь ввел 1 из 50 допустимых сокращений штата США в текстовое поле ввода. В противном случае они получат сообщение об ошибке. Кажется, я не могу найти функцию, которая делает это. Любая помощь приветствуется!

Ответ №1:

Вот метод проверки, который вы можете добавить для использования с jquery validate

Сначала вы объявляете валидатор:

 jQuery.validator.addMethod("isstate", function(value) {
    var states = [
        "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA",
        "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",
        "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",
        "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC",
        "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY",
        "AS", "DC", "FM", "GU", "MH", "MP", "PR", "PW", "VI"
    ];
    return $.inArray(value.toUpperCase(), states) != -1;
}, "Data provided is not a valid state");
  

Затем примените валидатор

 $("#myform").validate()
  

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

 <input type="text" value="de" class="isstate" />
  

Вот рабочая демонстрация

Комментарии:

1. Макгрейлм, спасибо! Это именно то, что я ищу, но я получаю это в моей консоли ошибок FireFox: Ошибка: состояния.Верхний регистр не является функцией.

2. извините, что предполагалось перейти к значению, поскольку значение — это строка, которая должна быть в верхнем регистре, чтобы проверить, что она в массиве, я думаю, что в любом случае она чувствительна к регистру

3. @Mcgrailm Я пробовал jQuery.validator.addMethod("isstate", function(value.toUpperCase()) { var states = ['PA',"CA"] // of course you will need to add more return $.inArray(value,states); }, "Data provided is not a valid sate"); — что, похоже, неверно. Есть идеи, что я делаю не так?

4. @paul Я забыл, что inarray возвращает -1 вместо false, поэтому мне пришлось изменить код, чтобы обойти это

5. На случай, если это кому-нибудь поможет… вот точная функция, которую я в конечном итоге использовал: jQuery.validator.addMethod("isstate", function(value) { var states = [,"AK","AZ","AR","CA","CO","CT","DE","DC","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","MD","MA","MI","MN","MS","MO","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY" ] var in_array = $.inArray(value.toUpperCase(), states); if (in_array == -1) { return false; }else{ return true; } }, "Please enter a valid US state");

Ответ №2:

Вы могли бы использовать прослушиватель change(), который просто проверяет входные данные по вашему списку допустимых входных строк и включает кнопки отправки только в том случае, если у вас есть совпадение.

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

С уважением,

Крис

Ответ №3:

Вот грязное быстрое решение:

http://jsfiddle.net/naveed_ahmad/CqXZu/1/