Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение данных textarea и программный вызов события об изменении (https://javascript.ru/forum/misc/76015-izmenenie-dannykh-textarea-i-programmnyjj-vyzov-sobytiya-ob-izmenenii.html)

fokas.pokas 25.11.2018 07:45

Изменение данных textarea и программный вызов события об изменении
 
При работе с данными на некой странице, результат выводится в textarea. Если его изменить, данные на странице так же изменятся. Та как мне не понятно, как там все устроено, работать с данными я попытался через textarea.

После присваивания значения value у textarea, не вызываются события об изменении данных для этого элемента. Потому на странице никакой реакции нет. Как сообщить слушателям, что данные изменились?

Эмулировать нажатие клавиши Enter, как я уже понял, нельзя. Попробовал так же поместить textarea в form и вызвать .form.submit(), но это привело только к перезагрузке страницы.

Я почти ничего не нашел по этому вопросу. Возможно, эмулировать ввод данных и вовсе не адекватная затея. Прошу помочь или направить в правильную сторону.

j0hnik 25.11.2018 09:53

одно из двух скорее всего поможет
document.querySelector('textarea').dispatchEvent(new Event("change"));

document.querySelector('textarea').dispatchEvent(new Event("input"));

fokas.pokas 25.11.2018 10:48

Спасибо огромное. Действительно, сработала последовательность
document.querySelector('textarea').dispatchEvent(new Event("input"));
document.querySelector('textarea').dispatchEvent(new Event("blur"));

Svorg 25.11.2018 12:22

Во-первых, querySelector() ищет "первый попавшийся элемент из группы элементов подходящих под фильтр", причём его может и не найтись, тогда в том виде вам будет ошибка:
Цитата:

Uncaught TypeError: Cannot read property 'dispatchEvent' of null at ...

Может стоит как-то так?:
for (const e of document.querySelectorAll('textarea')) {
  e.dispatchEvent(new Event("input"));
  e.dispatchEvent(new Event("blur"));
};
И получше подумать над конкретизацией фильтра в querySelectorAll()...

fokas.pokas 25.11.2018 16:41

Это просто общий демонстрационный код, в котором j0hnik поставил акцент только на методе отправки события в общую систему событий от конкретного элемента.
Да, я понимаю, что таким образом возвращается первый textarea найденный в DOM

fokas.pokas 25.11.2018 23:45

Мне достаточно было пройтись по содержанию учебника :blink: Я все таки, как оказалось, поленился...

Генерация событий на элементах


Часовой пояс GMT +3, время: 07:21.