Общий способ получить значение ввода независимо от типа - PullRequest
6 голосов
/ 15 августа 2011

Я пытаюсь написать универсальную функцию, которую я могу использовать с плагином проверки jquery, который сделает поле обязательным на основе значения другого поля.Вот что я хочу, чтобы произошло:

  • Если значение поля 1 находится в указанном массиве значений (в настоящее время выполняется тестирование с «Нет», «н / д» и «0») или пусто, ничего не делать.В противном случае сделайте обязательным поле 2.

Получение значения поля 1 является проблемой.У меня не было проблем с тем, чтобы выяснить это с помощью ввода текста или <select>, но я пытаюсь заставить его работать с радио и испытываю трудности.Вот отрывок из моего кода:

var value = $('[name="option"]').val(),
    empty = ['no', '', 'n/a', '0'];

// If the input is not "empty", make the additional field required
if ($.inArray(value.toLowerCase(), empty) < 0) { // returns -1 if not found
    required = true;
} else {
    required = false;
}

Это работает для всего, что мне нужно, кроме радиоприемников, потому что кажется, что он читает значение первого радио, независимо от того, было ли оно проверено или нет.

Поле, которое вызовет «обязательный», будет либо одним из различных текстовых вводов (text, url, email и т. Д.), Либо <select>, либо набором с одним выбором.радио.Нет множественного выбора.Я передам эту функцию в качестве параметра required в моей конфигурации проверки jquery для каждого поля, к которому я хочу применить его.Атрибут name оцениваемого поля «прочее» будет доступен для него.

Вот мое демо, довольно уродливо, но есть примечания: http://jsfiddle.net/uUdX2/3/

IЯ пробовал несколько разных способов, используя is(':checked') и селектор :checked, но все они потерпели неудачу.Я удалил их из демонстрации, потому что они не работали.

Что мне нужно, чтобы это работало с радиостанциями и текстового типа или выбирал входы, не зная, какой тип ввода этобудет?

Ответы [ 2 ]

8 голосов
/ 15 августа 2011

Попробуйте это

var value = $('[name="option"]');
var type = value.attr("type");

if(type && type.toLowerCase() == 'radio')
  value = value.filter(":checked").val();
else
  value = value.val();

Рабочая демо

1 голос
/ 15 августа 2011

Примерно так:

var value = $('[type="radio"][name="option"]:checked, [type!="radio"][name="option"]', form).val() || '0'

Совсем похоже на Шанкара, но делает все это в селекторе.

http://jsfiddle.net/infernalbadger/uUdX2/8/

Не работает, когда ничего не выбрано,Не уверен, что вы хотите, чтобы это произошло, когда это произойдет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...