Всем привет!
По историческим причинам (очень много уже написанного кода) работаю с 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