Запустить событие изменения для выбора, даже если тот же параметр повторно выбран
В принципе, у меня выпадающее меню выглядит следующим образом:
<select>
<option>0</option>
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
</select>
Я пытаюсь написать функцию, которая запускается, даже если вы выбираете ту же опцию, то есть даже если раскрывающийся список открывается и повторно выбирает выбранный параметр, я хочу, чтобы он выполнял эту функцию.
Ответы
Ответ 1
Если вы хотите выбрать с помощью мыши, вы можете использовать mouseup
. Однако он будет срабатывать при открытии окна выбора, поэтому вам нужно будет отслеживать количество раз, когда оно было запущено (даже: выбор открывается, нечетно: выбор закрывается): http://jsfiddle.net/T4yUm/2/.
$("select").mouseup(function() {
var open = $(this).data("isopen");
if(open) {
alert(1);
}
$(this).data("isopen", !open);
});
Ответ 2
Ответ pimvdb был большой помощью для меня, но я добавил несколько дополнительных бит, чтобы иметь дело с активацией клавиатуры и навигацией вдали от выбора:
$('select').mouseup(... as in pimvdb... )
.blur(function() {
$(this).data('isopen', false);
}).keyup(function(ev) {
if (ev.keyCode == 13)
alert(1);
});
Обработчик размытия имеет дело с навигацией в сторону от выбора, когда раскрывающийся список открыт, обработчик keyup имеет дело с изменением значения выбора с помощью клавиатуры. Поведение заключается в том, что пользователь считается, что он, наконец, выбрал значение, когда он нажимает кнопку "вернуться", чтобы перейти. Если вам нужно другое поведение с клавиатурой, это не сложно сделать.
Ответ 3
Альтернативно, используйте событие .blur()
- http://jsfiddle.net/VKZb2/4/
Pro
Это будет срабатывать в любом случае.
Con
Он срабатывает только после того, как элемент управления теряет фокус.
Ответ 4
select
не предназначен для использования таким образом - есть хаки, которые вы можете использовать, чтобы получить такое поведение в большинстве случаев, например отслеживать события мыши и клавиатуры на select
, но они не гарантируют, что они сохранят работать или работать на каждой платформе.
Я бы предложил либо...
- Сбрасывает значение
select
на значение по умолчанию при изменении и использует какой-либо другой текст, чтобы указать, какой из них выбран, или
- с помощью элемента управления, отличного от
select
.
Можете ли вы описать конечную цель немного подробнее?
Ответ 5
Я столкнулся с той же проблемой. Я просто добавил событие click в теги опций и изменил значение select:
$("#select option").mouseup(function() {
$(this).parent().val($(this).attr("value"));
// do something.
});
ПРИМЕЧАНИЕ. Это не работает на устройствах iPhone или iPad.