Я только что испытал какое-то странное поведение в Firefox, которое позволяет пользователю открывать выпадающий список, перемещаться со стрелками, а затем вместо того, чтобы вкладывать или щелкать по стороне, пользователь может щелкнуть другой элемент, что приведет к изменению выберите значение без стрельбы change
событие.
Чтобы обойти это, вы можете вызвать change
всякий раз, когда срабатывает событие keyup
(также, пожалуйста, предложите другие события?), И выбор имеет значение, отличное от предыдущего.
var selectRegistry = {},
$selects = $('select');
$selects.bind('change', function() {
var $this = $(this);
selectRegistry[$this.attr('id')] = $this.val();
});
$selects.bind('keyup scroll select', function() {
var $this = $(this);
if ($this.val()!=selectRegistry[$this.attr('id')])
{
$this.trigger('change');
}
});
Вы можете использовать функцию .live()
, если у вас будут динамически создаваемые элементы select во время выполнения веб-страницы.