webgraph,
ошибки в консоли какие-то есть? |
рони,
У меня тоже пк — макбук.. и в iOS тоже не работает. Добавлять — добавляет, а удалять — не хочет.. прям никак не хочет.. Что же теперь делать?.. :) |
рони,
в консоли нет никаких ошибок |
webgraph,
попробуйте так заменить //list.remove(); e.removeChild(list); |
рони,
Это тоже не сработало. Я решила вывести в консоль текст при нажатии. И когда нажимаешь клавишу delete - в консоль ничего не выводится. словно он эту кнопку не считает кнопкой. ______________ Даже это не помогло: let key = event.keyCode || event.charCode || event.which; if (key === 46 || key === 'Delete' || key === 8 || key === 'Backspace' && (target = target.closest('.check-text'))) { ... } |
webgraph,
keydown в вашем коде или keypress? |
рони,
У вас было написано keydown, а до этого keypress. Т.к. при keydown не сработало — было поставлено keypress. Хы Т.к. были добавлены дополнительные коды, то теперь с keydown удаление работает!)) оказывается на macbook это вообще Backspace (код клавиши 8). НО !) При фокусе после удаления — курсор появляется в начале строки. А по логике он должен в конец текста вставать. Как сфокусировать на самом конце текста?) |
Цитата:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> [contenteditable] { height: 50px; width: 400px; border: 1px solid #000000; } [contenteditable]:focus { outline: none; border-color: #FF0000; } </style> <title></title> </head> <body> <!-- Весь список check-листов --> <section id="lists"> <!-- Первая группа check-листов --> <div class="group"> <div class="list list-container"> <input type="checkbox"> <div class="check-text" contenteditable=""></div> </div> <div class="list list-container"> <input type="checkbox"> <div class="check-text" contenteditable=""></div> </div> </div> <!-- Вторая группа check-листов --> <div class="group"> <div class="list list-container"> <input type="checkbox"> <div class="check-text" contenteditable=""></div> </div> <div class="list list-container"> <input type="checkbox"> <div class="check-text" contenteditable=""></div> </div> </div> <!-- ... Следующая группа check-листов и т.д. --> </section> <script> //функция, которая создает новый див function enterCheck(list) { let html = `<div class="list list-container"> <input type="checkbox"> <div class="check-text" contenteditable=""><\/div> <\/div>` list.insertAdjacentHTML('afterend', html); list.nextElementSibling.querySelector('.check-text').focus(); } //собираем массив всех group'ов let checkTexts = document.querySelectorAll('.group'); //перебираем этот массив checkTexts.forEach(function(e) { //когда в нём нажимаются клавиши e.addEventListener('keydown', function(event) { let target = event.target; //когда нажата Enter if (event.key === 'Enter' && (target = target.closest('.check-text'))) { //отменяем стандартное поведение(перенос строки) event.preventDefault(); //если текущий блок не пустой, то добавляем новый сразу после него if (target.innerText !== '') { let list = target.closest('.list') enterCheck(list); } }; if (event.key === 'Delete' && (target = target.closest('.check-text'))) { //отменяем стандартное поведение(перенос строки) event.preventDefault(); //если текущий блок пустой и есть блок выше, то удаляем его if (target.innerText === '') { let list = target.closest('.list') let prev = list.previousElementSibling; if (prev) { e.removeChild(list); let div = prev.querySelector('.check-text'), pos = div.innerHTML.length, range = document.createRange(); range.setStart(div.childNodes[0], pos); range.collapse(true); let sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } } }; }); }); </script> </body> </html> |
Часовой пояс GMT +3, время: 02:01. |