Помните, что событие change
происходит только в том случае, если изменяется значение элемента input.Когда пользователь взаимодействует с выбором нескольких значений, с помощью мыши или с помощью клавиатуры, значение изменяется - вы можете увидеть это в демонстрации на странице, когда отображается value
элемента.
Однако при выборе одного значения значение не изменяется , когда вы открываете раскрывающийся список и наводите курсор на значение, а также когда вы делаете то же самое с помощью клавиатуры.Поэтому событие change
работает правильно.
Если вы хотите обойти эту проблему, вы всегда можете использовать событие keydown, чтобы отловить изменения в значении и использовать его вместо этого.Это простой пример того, как может выглядеть такая функция:
$('select').focus(function() {
var v = this.value,
t = $(this),
c = t.children(':selected'); // Store the currently selected
// option element in a variable
t.keydown(function(e) {
switch (e.keyCode) {
case 38:
case 37:
c = c.prev().length ? c.prev() : c;
break;
case 40:
case 39:
c = c.next().length ? c.next() : c;
break;
}
// Do something with this information
console.log(c.text());
});
}).blur(function() {
$(this).unbind('keydown');
});
См. Простую демонстрацию этого здесь: http://jsfiddle.net/yijiang/UWaut/