У меня есть выбор нескольких, и я должен вынудить пользователя выбрать максимальные две опции, ничто больше.
Я пробую это:
jQuery.validator.addMethod("morethantwo",
function(value, element) {
var foo = [];
$(element+' :selected').each(function(i, selected){
foo[i] = $(selected).text();
alert(foo[i]);
});
return true;
},"Max two options."
);
Проблема состоит в том, что я получаю a:
uncaught exception: Syntax error, unrecognized expression: [object HTMLSelectElement]
ошибка. В то время как, если я делаю это:
$(element).each(function(i, selected){
foo[i] = $(selected).text();
alert(foo[i]);
});
Это работает, но я получаю все опции в выборе. Почему это? Действительно ли это - корректная дорога к обходу? Там лучшие пути состоят в том, чтобы сделать этот вид проверки?
Большое спасибо!
Чтобы ответить на вопрос, почему он ломается, element
является элементом DOM, а не строкой, поэтому в этом коде вы пытаетесь выполнить DOMElement + string
... что не не работает :) Вместо этого оберните элемент DOM и используйте .find ()
или .children ()
, чтобы получить параметры.
Зная, почему он сломался, вы можете написать свое правило следующим образом, чтобы проверить выбранные параметры:
jQuery.validator.addMethod("maxtwo", function(value, element) {
return $(element).find(":selected").length <= 2;
},"Max two options.");
Посмотрите здесь демонстрацию приведенного выше кода
Если вы строго имеете дело с <выберите несколько >
вы также можете сделать это:
return $(element).val().length <= 2;
Поскольку .val ()
в этом случае возвращает массив.