Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.01.2022, 09:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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

рони,

У меня тоже пк — макбук..

и в iOS тоже не работает.

Добавлять — добавляет, а удалять — не хочет.. прям никак не хочет..

Что же теперь делать?..
Ответить с цитированием
  #13 (permalink)  
Старый 26.01.2022, 10:06
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

рони,

в консоли нет никаких ошибок
Ответить с цитированием
  #14 (permalink)  
Старый 26.01.2022, 10:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

webgraph,
попробуйте так заменить
//list.remove();
                        e.removeChild(list);
Ответить с цитированием
  #15 (permalink)  
Старый 26.01.2022, 10:19
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

рони,

Это тоже не сработало.

Я решила вывести в консоль текст при нажатии. И когда нажимаешь клавишу delete - в консоль ничего не выводится. словно он эту кнопку не считает кнопкой.

______________

Даже это не помогло:

let key = event.keyCode || event.charCode || event.which;

if (key === 46 || key === 'Delete' || key === 8 || key === 'Backspace' && (target = target.closest('.check-text'))) {

...

}
Ответить с цитированием
  #16 (permalink)  
Старый 26.01.2022, 10:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

webgraph,
keydown в вашем коде или keypress?
Ответить с цитированием
  #17 (permalink)  
Старый 26.01.2022, 10:31
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

рони,

У вас было написано keydown, а до этого keypress. Т.к. при keydown не сработало — было поставлено keypress. Хы

Т.к. были добавлены дополнительные коды, то теперь с keydown удаление работает!)) оказывается на macbook это вообще Backspace (код клавиши 8).

НО !) При фокусе после удаления — курсор появляется в начале строки. А по логике он должен в конец текста вставать.

Как сфокусировать на самом конце текста?)
Ответить с цитированием
  #18 (permalink)  
Старый 26.01.2022, 11:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от webgraph
Как сфокусировать на самом конце текста?)
<!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>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При нажатии на div происходит переход к следующему от него Адам Элементы интерфейса 2 05.01.2017 23:29
Скрыть div при нажатии на картинку SLameN jQuery 6 14.04.2014 21:27
при нажатии на раздел меню поворачивается маркер Сергей545 Элементы интерфейса 5 08.12.2013 22:15
onClick на button при нажатии Enter atech Events/DOM/Window 2 09.08.2012 16:48
смена div при нажатии на ссылку bars Элементы интерфейса 11 23.10.2009 12:45