2012-05-03 7 views
5

У меня есть мульти выбора выпадающий например:Получить щелкнул вариант в раскрывающемся списке многократным

<select id="myList" multiple="multiple"> 
    <option value="1">Opt #1</option> 
    <option value="2" selected="selected">Opt #2</option> 
    <option value="3" selected="selected">Opt #3</option> 
    <option value="4">Opt #4</option> 
</select> 

Если я затем выбирает Opt #4, как я тогда только получить Opt #4 и не Opt #2 и Opt #3? Я знаю, что я могу получить все выбранные опции этим:

var selectedOptions = $("#myList option:selected"); 

Однако я хочу только вариант я нажал - Opt #4. Это возможно?

Редактировать: обратите внимание, что при манипулировании списком внутри события change я не могу сделать это в событии click. Также добавлено несколько кратных.

+0

Чего вы хотите достичь? Если вы хотите получить опцию «clicked», почему вы выбираете multi? – MatuDuke

+2

Ты пропустил, чтобы добавить атрибут 'multiple', чтобы выбрать тег? –

+0

Вы пропустили атрибут 'mulitple =" multiple "' от своего 'select'. Помимо этого он должен работать. – phuzi

ответ

7

Вы можете получить его в обработчик щелчка для каждого элемента опции:

$("#myList option").click(function() { 
    var clickedOption = $(this); 
}); 

Update

EDIT: Как я управлять списком внутри события изменения, я могу Не делайте этого в событии клика.

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

$("#myList").on("click", "option", function() { 
    var clickedOption = $(this); 
}); 
+0

Это добавит отдельный обработчик событий для каждой опции. Если вы когда-либо добавляли опции после вызова этого, новые параметры не будут работать должным образом. Посмотрите мое решение о том, как избежать этой проблемы. –

+0

Я забыл упомянуть, что я манипулирую списком внутри события изменения, поэтому я не могу сделать это в событии click. – Frets

+0

@ Не беспокойтесь, проверьте мое обновление. –

1

Как вы знаете, если вы нажали кнопку opt # 4 без нажатия клавиши Cntrl, вы получите только опцию №4 в качестве выбранной опции.

Если пользователь нажал кнопку выбора № 4 с нажатой клавишей Cntrl, будут выбраны все три параметра. Таким образом, будут возвращены все три варианта. Если вы хотите только Opt # 4, вам нужно будет добавить обработчик события клика.

1

Может быть что-то вроде следующего вам помочь?

$('#myList').delegate('option', 'click', function (opt) { 
    alert('Option ' + opt.value + ' was clicked'); 
}); 
Смежные вопросы