Допустим, я прикрепляю обработчик события «изменение» javascript к элементу select, который отправляет ajax-запрос на загрузку некоторых вещей с сервера.
Это нормально в Firefox. Однако в IE событие change будет срабатывать каждый раз, когда вы быстро прокручиваете опции поля со списком с помощью колесика мыши. Это хлопотно, поскольку спамит сервер запросами, и нет никакой гарантии, что запросы возвращаются в правильном порядке, поэтому состояние на стороне клиента может стать несовместимым.
Итак, наш предыдущий обходной путь заключался в том, что мы вводим тайм-аут в обработчик изменений, так что он будет ждать доли секунды, прежде чем фактически отправит запрос. Если за это короткое время приходит другое событие изменения, мы отменяем предыдущий тайм-аут и запускаем новый, предотвращая тем самым рассылку спама по нескольким запросам.
Теперь, хотя это, кажется, работает, это немного хакерски, и мне интересно, есть ли лучший подход. Есть ли другое событие, к которому мы можем подключиться, чтобы оно не срабатывало повторно при прокрутке с помощью мыши? Или мы должны просто отключить колесико мыши (onmousewheel = "return false;")? Firefox, похоже, не поддерживает колесико мыши через поля со списком, но я не уверен, является ли отключение колесика мыши серьезным юзабилити, нет-нет или что-то в этом роде.
Кто-нибудь может порекомендовать другие решения?