Информация об изменениях

Сообщение Re[2]: [React] dispatchKeyEvent рулит. Но как нажать DEL или от 01.09.2019 21:27

Изменено 01.09.2019 21:38 VladCore

Re[2]: [React] dispatchKeyEvent не так уж и плох. Но как нажать DEL или Backspac
Здравствуйте, Ops, Вы писали:

Я сначала думал что dispatchKeyEvent не сможет "эмулировать" нажатие юникодных символов но это не так. Они правильно передаются в параметре text.

Ops>А если

Ops>
Ops>document.getElementById('Name').dispatchEvent(new Event('change'));
Ops>

Ops>?

Это что то не ты ты написал.

Дело не в том что в конструкторе нету параметра type
В ивенте надо не только тип но и остальные свойства — как минимум target.value
Во вторых наверно все же не type="change" а type=input с действием keydown и кодом клавиши, которое текущая внутренняя реализация маппит на SyntheticEvent с type="change" и target.value.

Вот эта привязка к реализации реакта мне и не нравится.

В третьих текущая реализация реакта в обработчике ивента трекает внутри предыдущее полное значение — в результате мешанина получается если задавать значение через input.value и потом досылать dispatchEvent вызовы.

А так input.focus() выделяет всё в input и потом первое нажатие клавиш удаляет всё предыдущее значение.
Если нужно пустое значение — это не будет работать. Надо как то backspace сначала послать. Вот в чем единственная проблема.



Ops>ЗЫ. Это не реакт, это браузер не генерирует событий при изменении value из кода.


Re[2]: [React] dispatchKeyEvent рулит. Но как нажать DEL или
Здравствуйте, Ops, Вы писали:

Я сначала думал что dispatchKeyEvent не сможет "эмулировать" нажатие юникодных символов но это не так. Они правильно передаются в параметре text.
и в цикле его не нужно вызывать по одной букве за раз.

Единственная проблема если новое значение пустое, то старый текст просто выделяется весь, но text="" старое значение не удаляет.
Как передать DEL или BACKSPACE?

Ops>А если

Ops>
Ops>document.getElementById('Name').dispatchEvent(new Event('change'));
Ops>

Ops>?

Это что то не ты ты написал.

Дело не в том что в конструкторе нету параметра type
В ивенте надо не только тип но и остальные свойства — как минимум target.value
Во вторых наверно все же не type="change" а type=input с действием keydown и кодом клавиши, которое текущая внутренняя реализация маппит на SyntheticEvent с type="change" и target.value.

Вот эта привязка к реализации реакта мне и не нравится.

В третьих текущая реализация реакта в обработчике ивента трекает внутри предыдущее полное значение — в результате мешанина получается если задавать значение через input.value и потом досылать dispatchEvent вызовы.

А так input.focus() выделяет всё в input и потом первое нажатие клавиш удаляет всё предыдущее значение.
Если нужно пустое значение — это не будет работать. Надо как то backspace сначала послать. Вот в чем единственная проблема.



Ops>ЗЫ. Это не реакт, это браузер не генерирует событий при изменении value из кода.