Javascript.RU

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

Сообщение от NovichokJS
которые чекаем спускались в самый вниз.
append and prepend
Ответить с цитированием
  #12 (permalink)  
Старый 10.07.2022, 15:09
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от рони Посмотреть сообщение
NovichokJS,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script>
        alert(document.body ? "тело страницы создано" : "тело страницы отсутствует");
    </script>
</head>

<body>
    <script>
        alert(document.body ? "тело страницы создано" : "тело страницы отсутствует");
    </script>
</body>

</html>
это что?)
Ответить с цитированием
  #13 (permalink)  
Старый 10.07.2022, 15:18
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от рони Посмотреть сообщение
append and prepend
спасибо, понял ulElement.append(li);
Ответить с цитированием
  #14 (permalink)  
Старый 10.07.2022, 15:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

NovichokJS,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        ul {
            list-style: none;
            width: 240px;
        }

        .list__item_done {
            background-image: -webkit-linear-gradient(left, #0000CD, #FF0000);
            background-image: linear-gradient(to right, #0000CD, #FF0000);
            color: #FFFFFF;
        }
    </style>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            const ul = document.querySelector('.list');
            const lis = Array.from(ul.querySelectorAll('.list__item'));
            ul.addEventListener('click', () => {
                ul.append(...lis);
                for (let li of lis) {
                    if (li.querySelector(":checked")) {
                        li.classList.add("list__item_done");
                        ul.append(li)
                    } else {
                        li.classList.remove("list__item_done")
                    }
                }
            });
        })
    </script>
</head>

<body>
    <ul class="list">
        <li class="list__item"><input type="checkbox" class="list__item-checkbox">Buy milk</li>
        <li class="list__item"><input type="checkbox" class="list__item-checkbox">Pick up Tom from airport</li>
        <li class="list__item"><input type="checkbox" class="list__item-checkbox">Visit party</li>
    </ul>
</body>

</html>
Ответить с цитированием
  #15 (permalink)  
Старый 10.07.2022, 15:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108


<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        ul {
            list-style: none;
            width: 240px;
        }

        .list__item_done {
            background-image: -webkit-linear-gradient(left, #0000CD, #FF0000);
            background-image: linear-gradient(to right, #0000CD, #FF0000);
            color: #FFFFFF;
        }
    </style>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            const ul = document.querySelector('.list');
            const lis = Array.from(ul.querySelectorAll('.list__item'));
            ul.addEventListener('click', () => {
                const before = [], after = [];
                for (let li of lis) {
                    if (li.querySelector(":checked")) {
                        li.classList.add("list__item_done");
                        after.push(li)
                    } else {
                        li.classList.remove("list__item_done");
                        before.push(li)
                    }
                };

                ul.append(...before, ...after)
            });
        })
    </script>
</head>

<body>
    <ul class="list">
        <li class="list__item"><input type="checkbox" class="list__item-checkbox">Buy milk</li>
        <li class="list__item"><input type="checkbox" class="list__item-checkbox">Pick up Tom from airport</li>
        <li class="list__item"><input type="checkbox" class="list__item-checkbox">Visit party</li>
    </ul>
</body>

</html>
Ответить с цитированием
  #16 (permalink)  
Старый 10.07.2022, 15:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от NovichokJS
это что?)
это была демонстрация, что если бы скрипт работал с document.body, то находясь выше document.body скрипт выдал бы ошибку.
Ответить с цитированием
  #17 (permalink)  
Старый 10.07.2022, 15:34
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от рони Посмотреть сообщение
это была демонстрация, что если бы скрипт работал с document.body, то находясь выше document.body скрипт выдал бы ошибку.
да, да, понятно)
Ответить с цитированием
  #18 (permalink)  
Старый 10.07.2022, 15:41
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

еще такой вот момент))

я написал костыль выше в коде у себя.
Ну собственно сам массив задач:
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 handlerButton = () => {
  const getTask = document.querySelector('.task-input');
  if (getTask.value !== '') {
    tasks.push({ text: getTask.value, done: false });

    const getListElem = document.querySelector('.list');

    const getListItemElem = document.createElement('li');
    getListItemElem.classList.add('list__item');
    getListItemElem.innerText = getTask.value;

    const getCheckboxElem = document.createElement('input');
    getCheckboxElem.setAttribute('type', 'checkbox');
    getCheckboxElem.classList.add('list__item-checkbox');

    getListElem.prepend(getListItemElem);
    getListItemElem.prepend(getCheckboxElem);
    getTask.value = '';
  }
};

clickButton.addEventListener('click', handlerButton);


clickButton.addEventListener('click', handlerButton);

const ulElement = document.querySelector('.list');
const lis = ulElement.querySelectorAll('.list__item');

const handlerChexbox = () => {
  for (let i = 0; i < lis.length; i++) {
    let li = lis[i];
    if (li.querySelector(':checked')) {
      li.classList.add('list__item_done');
      ulElement.append(li);
    } else {
      li.classList.remove('list__item_done');
    }
  }
};
ulElement.addEventListener('click', handlerChexbox);


Оно работает, но не полностью. Мне надо чтобы добавленные таски также при отметке чекбокса спускались вниз. Сейчас они не добавляют класс list__item_done и не спускаются у меня.



Собственно, как и куда привязать блоки кода чтобы работало опускание отмеченных чекбоксом тасков вниз?

Последний раз редактировалось NovichokJS, 10.07.2022 в 15:50.
Ответить с цитированием
  #19 (permalink)  
Старый 10.07.2022, 17:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от NovichokJS
Собственно, как и куда привязать блоки кода чтобы работало опускание отмеченных чекбоксом тасков вниз?
код выше #15
Ответить с цитированием
  #20 (permalink)  
Старый 10.07.2022, 17:29
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от рони Посмотреть сообщение
код выше #15
работает немного криво. Если несколько кликов сделать на чекбок, только тогда отмечает его, подчеркивает текст и опускает вниз таски. Вот итоговый:

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 clickButton = document.querySelector('.create-task-btn');

const handlerButton = () => {
  const getTask = document.querySelector('.task-input');
  if (getTask.value !== '') {
    tasks.push({ text: getTask.value, done: false });

    console.log(tasks);

    const getListItemElem = document.createElement('li');
    getListItemElem.classList.add('list__item');
    getListItemElem.innerText = getTask.value;

    const getCheckboxElem = document.createElement('input');
    getCheckboxElem.setAttribute('type', 'checkbox');
    getCheckboxElem.classList.add('list__item-checkbox');

    listElem.prepend(getListItemElem);
    getListItemElem.prepend(getCheckboxElem);
    getTask.value = '';
  }
};

clickButton.addEventListener('click', handlerButton);

const handlerChexbox = () => {
  const lis = Array.from(listElem.querySelectorAll('.list__item'));
  listElem.addEventListener('click', () => {
    const before = [],
      after = [];
    for (let li of lis) {
      if (li.querySelector(':checked')) {
        li.classList.add('list__item_done');
        after.push(li);
      } else {
        li.classList.remove('list__item_done');
        before.push(li);
      }
    }

    listElem.append(...before, ...after);
  });
};
listElem.addEventListener('click', handlerChexbox);

Последний раз редактировалось NovichokJS, 10.07.2022 в 17:35.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать значения группы чекбоксов etulpan Общие вопросы Javascript 2 11.02.2017 01:59
Подсчет выбранных чекбоксов, радио, текста jemlive19 Элементы интерфейса 3 08.01.2017 21:20
Подсчет количества выбранных чекбоксов и радио jemlive19 Элементы интерфейса 0 08.01.2017 18:46
Посчитать значения чекбоксов sergylt Общие вопросы Javascript 12 08.02.2016 00:34
Создание массива с id чекбоксов fi.adm Элементы интерфейса 4 17.08.2014 11:55