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, время: 15:02. |