Здравствуйте, 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 из кода.