Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ошибка, при попытке повесить обработчик (https://javascript.ru/forum/misc/76024-oshibka-pri-popytke-povesit-obrabotchik.html)

Tipylja 26.11.2018 14:33

Ошибка, при попытке повесить обработчик
 
Здравствуйте. Подскажите пожалуйста, пытаюсь повесить обработчик на событие "blur" на инпате и получаю ошибку.
Код:

Uncaught TypeError: a.log is not a function
    at HTMLInputElement.a.(:3000/anonymous function).addEventListener (http://localhost:3000/js/all.js:1:793)

Хотя обработчик на "фокус" срабатывает нормально. Вот код:
window.addEventListener('DOMContentLoaded', (e) => {
    let controls = document.getElementsByClassName('input__control');
    for(let i = 0;  i<controls.length; i++){
        controls[i].addEventListener('focus', (e)=>{
            let input = e.target.closest('.input');
            input.classList.add("input_focused");            
            console.log(controls[i]);//Тест
            controls[i].addEventListener("blur", (e)=>{
                controls.log('111');//Тест               
            })
        })
    }
});

Вот HTML:
<span class="input input_size-l search__input">
          <span class="input__box">
                  <input class="input__control" placeholder="Что ищите?" name="search" id="search" value="">
            </span>
</span>

Tipylja 26.11.2018 14:49

Решил вот так:
window.addEventListener('DOMContentLoaded', (e) => {
    let controls = document.getElementsByClassName('input__control');
    for(let i = 0;  i<controls.length; i++){
        controls[i].addEventListener('focus', (e)=>{
            let input = e.target.closest('.input');
            if(!input.classList.contains("input_focused")){
                input.classList.add("input_focused");
            }
        });
        controls[i].addEventListener('blur', (e)=>{
            let input = e.target.closest('.input');
            if(input.classList.contains("input_focused")){
                input.classList.remove("input_focused");
            }
        })
    }
});

Но все ранво не могу понять, почему в первом примере не вешался обработчик:(

j0hnik 26.11.2018 14:49

controls.log('111');//Тест
9 строка нет на винде такого метода

j0hnik 26.11.2018 14:52

Цитата:

Сообщение от Tipylja
почему в первом примере не вешался обработчик

первый пример полная хрень, вешать новый обработчик при каждом событии фокус.

Tipylja 26.11.2018 14:57

Цитата:

Сообщение от j0hnik (Сообщение 499388)
controls.log('111');//Тест
9 строка нет на винде такого метода

Да уж=))Спасибо за то, что тыкнули
Цитата:

Сообщение от j0hnik (Сообщение 499388)
первый пример полная хрень, вешать новый обработчик при каждом событии фокус.

Спасибо за пояснение, только учусь, действительно ерундово вышло:thanks:


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