Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение поведения выбранных чекбоксов (https://javascript.ru/forum/misc/84220-izmenenie-povedeniya-vybrannykh-chekboksov.html)

NovichokJS 11.07.2022 12:38

последнее, хотел бы такой момент еще пофиксить - в dataset.i получаю сейчас строку, а в массиве ищу по индексу (число). Как это исправить?

рони 11.07.2022 12:58

Цитата:

Сообщение от NovichokJS
Как это исправить?

зачем?

NovichokJS 11.07.2022 13:04

Цитата:

Сообщение от рони (Сообщение 546603)
зачем?

тест не проходится у меня

рони 11.07.2022 14:11

Цитата:

Сообщение от NovichokJS
тест не проходится у меня

микроскопа жаль нету)))
но есть тест
let i = "3";
alert([{},{},{},{done: 45}][i].done);

рони 11.07.2022 14:14

NovichokJS,
что не так?
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
</head>
<body>
    <h1 class="title">Todo List</h1>
    <main class="todo-list">
        <div class="actions">
            <input class="task-input" type="text" />
            <button class="btn create-task-btn">Create</button>
        </div>
        <ul class="list"></ul>
    </main>
    <script>
        const tasks = [{
                text: 'Buy milk',
                done: false
            },
            {
                text: 'Pick up Tom from airport',
                done: false
            },
            {
                text: 'Visit party',
                done: false
            },
            {
                text: 'Visit doctor',
                done: true
            },
            {
                text: 'Buy meat',
                done: true
            },
        ];
        const listElem = document.querySelector('.list');
        const renderTasks = tasksList => {
            const listItemsElems = tasksList
                .sort((a, b) => a.done - b.done || (a.text > b.text ? 1 : -1))
                .map(({
                    text,
                    done
                }, i) => {
                    const listItemElem = document.createElement('li');
                    listItemElem.classList.add('list__item');
                    if (done) {
                        listItemElem.classList.add('list__item_done');
                    }
                    const checkboxElem = document.createElement('input');
                    checkboxElem.setAttribute('type', 'checkbox');
                    checkboxElem.checked = done;
                    checkboxElem.dataset.i = i;
                    checkboxElem.classList.add('list__item-checkbox');
                    listItemElem.append(checkboxElem, text);
                    return listItemElem;
                });
            listElem.innerHTML = '';
            listElem.append(...listItemsElems);
        };
        renderTasks(tasks);
        const clickButton = document.querySelector('.create-task-btn');
        const handlerButton = () => {
            const getTask = document.querySelector('.task-input');
            let text = getTask.value.trim();
            if (text) {
                tasks.push({
                    text,
                    done: false
                });
                getTask.value = '';
                renderTasks(tasks);
            }
        };
        clickButton.addEventListener('click', handlerButton);
        const handlerChexbox = (event) => {
            let target = event.target;
            let i = target.dataset.i;
            let obj = tasks[i];
            if(obj.done === true) obj.done = false;
            else obj.done = true;
            renderTasks(tasks);
        };
        listElem.addEventListener('change', handlerChexbox);
    </script>
</body>
</html>


Часовой пояс GMT +3, время: 14:28.