Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.04.2023, 21:17
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

В чём дело? addEventListener — 'input' работает, а 'blur' или 'focus' — нет.
Надо чтоб после события blur скрипт очистил textarea с помощью trim() и если он в итоге оказался пустым — вообще удалить блок с ним.

У меня работает с событием 'input', а вот 'blur' он почему-то не видит... Объясните в чём причина и как заставить код работать?


<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Blur</title>
</head>

<body>
    
    <ul id="list">
        <li class="item"><textarea placeholder="Введите здесь текст"></textarea>
        <li class="item"><textarea placeholder="Введите здесь текст"></textarea>
    </ul>
    <script>

       const list = document.getElementById('list');

       // при вводе в textarea события ввода отслеживаются
       list.addEventListener('input', function(event) {

            console.log('Input works');

            let target = event.target;
       })


       // но когда надо отследить Blur — ничего не работает :(((
       list.addEventListener('blur', function(event) {

            console.log('Blur works?');

            let target = event.target;

            // после расфокусировки почистить textarea от лишних пробелов и переносов
            target.value = target.value.trim();

            let listItem = target.closest('.item');

            // если после расфокусировки textarea пустой — удалить блок с ним
            if(target.value === '') listItem.remove();
       })

    </script>
</body>

</html>


Вообще не понимаю как так... Какова же причина?
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2023, 21:30
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

ChatGPT помог мне. Оказывается надо было всего лишь добавить в конце true, чтобы обработчик сначала начал обрабатывать вложенные элементы:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Blur</title>
</head>

<body>
    
    <ul id="list">
        <li class="item"><textarea placeholder="Введите здесь текст"></textarea>
        <li class="item"><textarea placeholder="Введите здесь текст"></textarea>
    </ul>
    <script>

       const list = document.getElementById('list');

       // при вводе в textarea события ввода отслеживаются
       list.addEventListener('input', function(event) {

            console.log('Input works');

            let target = event.target;
       })


       // но когда надо отследить Blur — ничего не работает :(((
       list.addEventListener('blur', function(event) {

            console.log('Blur works?');

            let target = event.target;

            // после расфокусировки почистить textarea от лишних пробелов и переносов
            target.value = target.value.trim();

            let listItem = target.closest('.item');

            // если после расфокусировки textarea пустой — удалить блок с ним
            if(target.value === '') listItem.remove();

       // вот здесь надо было поставить true
       }, true)

    </script>
</body>

</html>
Ответить с цитированием
  #3 (permalink)  
Старый 21.04.2023, 10:36
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

https://learn.javascript.ru/focus-bl...cusin-focusout
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Живой поиск в больше чем один input l_2001 Общие вопросы Javascript 0 14.07.2022 10:26
AddEventListener не правильно работает с классами Flakky Events/DOM/Window 2 27.05.2016 13:51
Скрипт не работает в FF и опера, но работает в IE(в чем дело???) Cepera Firefox/Mozilla 1 24.08.2012 16:46
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27