Перекрытие события keyup другими при setTimeout
Всем привет!
По историческим причинам (очень много уже написанного кода) работаю с ExtJS v 2.3. Недавно понадобилось сделать отлов события keyup в input, после которого отправлять ajax-запрос на сервер, а полученный результат записывать в другой input. Все работает, только вот обнаружил, что запрос на сервер идет после каждого нажатия клавиши. Нашел реализацию setTimeout для событий ExtJS (зовется buffer) и в итоге код получился такой: workTimePPR.on('keyup', function(workTimePPR, e) { console.log(e); var symKey = e.getKey(); //если валидация пройдена и значение не пустое //0-9 (коды 48-57) и двоеточие (код 58) if(workTimePPR.isValid() && !Ext2.isEmpty(workTimePPR.getValue()) && (symKey >= 48 && symKey <= 58)) { //здесь код ajax-запроса } }, this, {buffer: 1000}); Работает замечательно и отсекает все ненужные нажатия Alt/Ctrl/Enter итп, однако есть интересная проблема — если мы водим мышкой во время ввода значения, то идет отлов событий mouseout/mousemove вместо keyup, у которых symKey уже равен undefined. Это связано как раз с задержкой в 1000 мс, которую установили. Как разрешить эту проблему? Пока что в голову приходит добавление в условие событий мыши и symKey === undefined, но это решение мне не нравится. p.s. Ссылка на документацию по событиям в 2.3: https://docs.sencha.com/extjs/2.3.0/...od-addListener |
Часовой пояс GMT +3, время: 01:36. |