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

Добавить div при нажатии Enter [на чистом JS]
Как добавить новый DIV при клике по Enter сразу после дива и сделать на нем focus()?

В моём решении вместо 1 дива добавляет разное множественное количество...


<!DOCTYPE html>
<html>

<body>

<!-- Весь список check-листов -->

<section id="lists">



<!-- Первая группа check-листов -->

<div class="group">

<div class="list">
   <div class="list-container">
         <input type="checkbox"><div class="check-text" contenteditable></div>
   </div>
</div>

<div class="list">
   <div class="list-container">
         <input type="checkbox"><div class="check-text" contenteditable></div>
   </div>
</div>

</div>


<!-- Вторая группа check-листов -->

<div class="group">

<div class="list">
   <div class="list-container">
         <input type="checkbox"><div class="check-text" contenteditable></div>
   </div>
</div>

<div class="list">
   <div class="list-container">
         <input type="checkbox"><div class="check-text" contenteditable></div>
   </div>
</div>

</div>


<!-- ... Следующая группа check-листов и т.д. -->


</section>



<script>



//функция, которая создает новый див

function enterCheck(e) {

//создаем новый див
   let div = document.createElement('div');

   //добавляем ему класс
   div.classList.add('list');

      //наполняем шаблоном списка
      div.innerHTML = `
         <div class="list-container">
            <input type="checkbox"><div class="check-text" contenteditable></div>
          </div>
      `;

         //перемещаемся на несколько дивов наверх (к началу текущего дива) 
         //и добавляем после него созданный div
            e.parentNode.parentNode.after(div);

            //устанавливаем на .check-text созданного дива focus() 
            //чтобы в нем можно было сразу вводить текст
            div.querySelector('.check-text').focus();
}



//собираем массив всех checkText'ов
let checkTexts = document.querySelectorAll('.check-text');

//перебираем этот массив
checkTexts.forEach(function(e){

   //когда сфокусирован на определенном checkText
   e.addEventListener('focus', function(){

      //когда в нём нажимаются клавиши
      e.addEventListener('keypress', function(event){

      //когда нажата Enter
      if(event.keyPress === 13){

      //отменяем стандартное поведение(перенос строки)
      event.preventDefault();

         //если текущий блок не пустой, то добавляем новый сразу после него
         if(this.innerText !== '') {
             enterCheck(this);
         }
      }
      });
   });
});

</script>


</body>
</html>
Ответить с цитированием