Подтвердить что ты не робот

Запустить событие изменения для выбора, даже если тот же параметр повторно выбран

В принципе, у меня выпадающее меню выглядит следующим образом:

<select>
  <option>0</option>
  <option selected="selected">1</option>
  <option>2</option>
  <option>3</option>
</select>

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

4b9b3361

Ответ 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.