|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.10.2019, 02:05 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
[РЕШЕНО] Событие onchange вызывается как onblur
Здравствуйте.
Сегодня я обнаружил забавную "не баг а фичу". Есть поле ввода, которое изначально работает криво, и попытки исправить его изнутри не увенчались успехом. Детали о кривизне его работы - отдельная достаточно длинная история, поэтому сейчас не о нём, а про мой очередной костыль. Если кратко - там проблема с селектором категории поиска, и поле ввода не реагирует на изменение селектора, если нажать на enter, а не на кнопку поиска. Это кривое поле скрывается, и на его место ставится такое-же поле ввода, только со своим функционалом и обёрткой JS для передачи ввода пользователя в изначальное поле поиска, для того что бы поиск работал. Теперь поиск работает как предполагается - одинаковая реакция на кнопку или enter, с учётом выбранной категории поиска - моё поле ввода передаёт значение в изначальное (скрытое) поле ввода, и если пользователь нажал enter - выполняется имитация нажатия на кнопку поиска, через эту кнопку всё работает как надо. Но сегодня я обнаружил интересную вещь: после ввода и потери фокуса на элементе, не получается что либо изменить в моём поле ввода. Полез в отладчик, и обнаружил, что в процессе набора текста не вызывается событие onchange, при этом решительно не понятно, каким образом восстанавливается уже введённый текст. Когда я убрал фокус ввода - то сработал breakpoint, и "глаза полезли на лоб". Так должен работать onblur, а мне нужен классический onchange - то есть отслеживание изменений по мере ввода текста. Отслеживание на keydown/keypress/keyup не вариант, потому что в этих событиях ввод ещё не подтверждён, и начинаются танцы со спец-символами, позиционированием курсора ввода, и прочими бубнами. Мне раньше даже пришлось прописать на enter дополнительную передачу значения в изначальное поле ввода, но тогда я не придал этому особого значения. Всегда можно повесить setInterval, но даже у моего костыльно-ориентированного программирования есть предел. По факту - setInterval не сможет полностью выполнить поставленную задачу, если скорость набора текста высокая (200+), даже если интервал задать 50 мс - проверено на себе. Что по итогу - вопрос: как отслеживать уже выполненные изменения по мере набора текста ?
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 25.10.2019 в 05:15. |
25.10.2019, 20:01 | #2 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
✔ Этот пост помечен как решение ✔ Попробуйте использовать событие input. То есть, обработчик oninput. Тогда ваш код будет выглядеть как-то так: Код:
Код:
Последний раз редактировалось Вадим Мошев; 27.10.2019 в 21:48. |
26.10.2019, 07:30 | #3 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Спасибо помогло.
У меня это проще =) В имеющейся конструкции поменял onchange на oninput в разметке. P. S. В данном проекте этот костыль далёк от убойных, можно сказать - это рядовой костыль. Сегодня три часа костылял отключение автоматической фильтрации поиска, которая завязана на сессию. В итоге получилась сввязка из четырёх костылей, что бы отправить ajax на отключение фильтрации если пользователь пришёл не с текущей страницы. Ну и после аякса (коих может быть несколько) - обновление страницы, через 500 милисекунд =)
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 26.10.2019 в 07:39. |
27.10.2019, 00:34 | #4 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Хорошо, что получилось помочь.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
OnBlur DIV | Alex1991 | JavaScript, Ajax | 2 | 16.09.2011 22:20 |
событие OnChange у RadioGroup | Andreych74 | Общие вопросы Delphi | 2 | 06.06.2011 12:43 |
Событие OnChange | bboyb-rock | JavaScript, Ajax | 0 | 18.04.2011 00:07 |
Событие OnChange - на одно из полей | namazi74 | БД в Delphi | 4 | 22.04.2010 12:52 |
Вычисления по условию. Событие onChange | Наташа | Помощь студентам | 13 | 27.12.2006 12:28 |