Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Почему может не срабатывать событие Input ? (https://javascript.ru/forum/events/84323-pochemu-mozhet-ne-srabatyvat-sobytie-input.html)

Andy_kun 05.08.2022 19:37

Почему может не срабатывать событие Input ?
 
Добрый вечер,

Подскажите, почему может не срабатывать событие Input ?

Вот такой простой код:

{

//--------------------------------------------------------------------
function my_func_addEventListener(event)
    {
console.log(event);
    }

//--------------------------------------------------------------------




    
let element = document.getElementsByClassName("gLFyf gsfi")[0];
console.log(element);

    if(element == undefined)
    {
          alert("undefined");        
    }
else
    {
        element.addEventListener("input", my_func_addEventListener);   
    }

}


За поле ввода беру начальную страницу поиска. И на самой первой странице поиска - событие Input - срабатывает, функция my_func_addEventListener - вызывается.

Но, как только я нажму поиск и гугл перейдет на страницу выдачи результатов поиска, то этот код уже не работает - событие Input не срабатывает, хотя имя класса - тоже самое.


Не срабатывает даже:

let element = document.getElementsByClassName("gLFyf gsfi")[0];

    if(element == undefined)
    {
          alert("undefined");        
    }
else
    {
        element.value = "Hello";
    }




В чем может быть причина ?

Nexus 05.08.2022 20:33

Цитата:

Сообщение от Andy_kun
В чем может быть причина ?

Элемент, скорее всего, не создает событие input и не имеет свойства value.

Andy_kun 05.08.2022 20:50

Цитата:

Сообщение от Nexus (Сообщение 547189)
Элемент, скорее всего, не создает событие input и не имеет свойства value.

А как же тогда сайт обрабатывает ввод и как хранит значение ?

Nexus 05.08.2022 21:21

Andy_kun, на странице 2 элемента с классами «gLFyf» и «gsfi»: первый - div, второй - input.
Вы выбираете первый элемент, у которого нет ни события input, ни свойства value.

Замените
document.getElementsByClassName("gLFyf gsfi")[0]

на
document.querySelector('input.gLFyf.gsfi')

Aetae 05.08.2022 21:24

Потому что элементов с таким классом на странице поиска внезапно 2:
console.log(document.getElementsByClassName("gLFyf gsfi").length)


Вообще, бессмысленно привязываться к именам класса которые явно являются результатом генерации. При любом следующем апдейте они изменятся.
Лучше привяжись к имени и типу:
document.querySelector('input[name="q"][type="text"]')

Andy_kun 05.08.2022 21:29

Цитата:

Сообщение от Nexus (Сообщение 547191)
Andy_kun, на странице 2 элемента с классами «gLFyf» и «gsfi»: первый - div, второй - input.
Вы выбираете первый элемент, у которого нет ни события input, ни свойства value.

Замените
document.getElementsByClassName("gLFyf gsfi")[0]

на
document.querySelector('input.gLFyf.gsfi')

Спасибо! Теперь понял.

Andy_kun 05.08.2022 22:54

Цитата:

Сообщение от Aetae (Сообщение 547192)
Потому что элементов с таким классом на странице поиска внезапно 2:
console.log(document.getElementsByClassName("gLFyf gsfi").length)


Вообще, бессмысленно привязываться к именам класса которые явно являются результатом генерации. При любом следующем апдейте они изменятся.
Лучше привяжись к имени и типу:
document.querySelector('input[name="q"][type="text"]')

Спасибо, не знал, что через .length - можно кол-во найденных .getElementsByClassName классов - узнать.


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