автоматическое обновление переменной

#javascript #html #css

#язык JavaScript #HTML #CSS

Вопрос:

я пытаюсь проверить, добавлены ли на доску дополнительные задачи. Так что я могу применить систему перетаскивания ко всем новым. Проблема в том, что если я использую цикл, моя переменная выпадает из области действия моей другой функции. Я сделал его глобальной переменной, поэтому я не знаю, почему я могу использовать его вне функции. Возможно, есть способ проверить это с помощью отдельной функции. Я добавил одну тестовую карту, и мое перетаскивание работает на ней, так что это просто переменная, которая не обновляется.

 // --------------------------- // Global variables // ---------------------------  // Add button const AddToDoButton = document.getElementById('new-to-do');  // Columns const ToDoColumn = document.getElementById('to-do-column'); const InProgressColumn = document.getElementById('in-progress-column'); const CompleteColumn = document.getElementById('complete-column');  var Tasks = document.querySelectorAll('.task');  // --------------------------- // Add new task structure // ---------------------------  AddToDoButton.addEventListener('click', AddNewTask);  function AddNewTask(){  // all HTML task parts  const NewTaskContainer = document.createElement('div');  const NewTaskHead = document.createElement('div');  const NewTaskName = document.createElement('h3');  const NewTaskDeleteButton = document.createElement('button');  const NewTaskDescription = document.createElement('p');   // adding drag  NewTaskContainer.setAttribute('draggable', 'true');   // adding all the classes  NewTaskContainer.classList.add('task');  NewTaskHead.classList.add('task-head');  NewTaskDeleteButton.classList.add('delete-task');  NewTaskDescription.classList.add('task-description');   // adding all the content  NewTaskName.innerHTML = "Task name";  NewTaskDescription.innerHTML = "task description"  NewTaskDeleteButton.innerHTML = "X"   // HTML structure  ToDoColumn.appendChild(NewTaskContainer);  NewTaskContainer.appendChild(NewTaskHead);  NewTaskHead.appendChild(NewTaskName);  NewTaskHead.appendChild(NewTaskDeleteButton);  NewTaskContainer.appendChild(NewTaskDescription); }  // --------------------------- // dragable functionality // ---------------------------  // dragable tasks function NewTasksCheck(){  var Tasks = document.querySelectorAll('.task');  console.log(Tasks); }  setInterval(NewTasksCheck, 1000);  Tasks.forEach(draggable =gt; {  draggable.addEventListener('dragstart', () =gt; {  draggable.classList.add('dragging');  console.log("dragstart");  });   draggable.addEventListener('dragend', () =gt; {  draggable.classList.remove('dragging');  console.log("dragend");  }); }); 
 * {  margin: 0;  padding: 0;  box-sizing: border-box; }  body {  font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; }  header {  height: 8vh;  background-color: rgb(175, 175, 175);  display: flex;  align-items: center;  justify-content: space-between; }  header gt; h1 {  margin-left: 50px; }  main {  background-color: rgb(206, 234, 243);  display: flex;  justify-content: space-around;  }  .task-column {  background-color: lightcoral;  min-height: fit-content;  margin: 10px;  width: 400px;  display: flex;  flex-direction: column;  align-items: center;  border-radius: 10px; }  .task-column gt; * {  margin: 10px; }  .task {  background-color: white;  padding: 10px;  width: 90%;  border-radius: 10px;  cursor: move; }  .task-head {  display: flex;  justify-content: space-between;  align-items: center;  font-size: 1.1rem;  padding-bottom: 10px;  margin-bottom: 10px;  border-bottom: solid black 1px; }  .delete-task {  background-color: red;  border: none;  height: 30px;  width: 30px;  border: solid black 1px;  border-radius: 50%;  font-size: 1.1rem;  font-weight: bold; }  .add-to-do {  margin-right: 50px;  padding: 15px 30px;  border-radius: 10px;  border: solid black 1px;  background-color: rgb(140, 233, 2);  font-size: 1.1rem;  font-weight: bold;  transition: ease-in-out 100ms; }  .add-to-do:hover {  transform: scale(110%); }  .add-to-do:active {  background-color: darkseagreen; }  .task.dragging {  opacity: 0.5; } 
 lt;!DOCTYPE htmlgt; lt;html lang="en"gt; lt;headgt;  lt;meta charset="UTF-8"gt;  lt;meta http-equiv="X-UA-Compatible" content="IE=edge"gt;  lt;meta name="viewport" content="width=device-width, initial-scale=1.0"gt;  lt;link rel="stylesheet" href="main.css"gt;  lt;titlegt;Planninglt;/titlegt; lt;/headgt; lt;bodygt;    lt;headergt;  lt;h1gt;planninglt;/h1gt;  lt;button id="new-to-do" class="add-to-do"gt;Add To Dolt;/buttongt;  lt;/headergt;   lt;maingt;  lt;div id="to-do-column" class="task-column"gt;  lt;h2gt;To Dolt;/h2gt;   lt;!-- example task --gt;  lt;div draggable="true" class="task"gt;  lt;div class="task-head"gt;  lt;h3gt;ExampleTasklt;/h3gt;  lt;button class="delete-task"gt;Xlt;/buttongt;  lt;/divgt;  lt;p class="task-description"gt;  This is an example  lt;/pgt;  lt;/divgt;    lt;/divgt;  lt;div id="in-progress-column" class="task-column"gt;  lt;h2gt;In Progresslt;/h2gt;  lt;/divgt;  lt;div id="complete-column" class="task-column"gt;  lt;h2gt;Completelt;/h2gt;  lt;/divgt;  lt;/maingt;   lt;script src="script.js"gt;lt;/scriptgt; lt;/bodygt; lt;/htmlgt; 

Комментарии:

1. О какой переменной вы говорите?

2. Если вы говорите о Tasks том , var что объявление в функции делает ее локальной переменной. Просто назначьте переменную без использования var , и вы назначите глобальную переменную.

3. Тебе это может пригодиться var Tasks = document.getElementByClassName("task"); . Это «живой список узлов», он автоматически обновляется при изменении DOM.

4. Но вы также можете использовать массив, который вы добавляете в AddNewTask() функцию.

5. да, я говорю о переменной Задач. Даже если я удалю var и сделаю его глобальным, он все равно не вызовет журналы консоли в перетаскиваемом.addEventListener ниже.