JavaScript/HTML 中的待办事项列表

Posted

技术标签:

【中文标题】JavaScript/HTML 中的待办事项列表【英文标题】:To Do List in JavaScript/HTML 【发布时间】:2014-12-23 19:54:49 【问题描述】:

我已经设置了这个待办事项列表,几乎所有的工作都很完美。但是,如果我删除列表中的所有内容。它不会让我添加新条目,我似乎无法弄清楚为什么。只要我在列表中至少有一个条目,它就可以正常工作。

非常感谢您的帮助。

< head >
  < script type = "text/javascript" >
  /*<![CDATA[*/
  function addTask() 
    if (document.forms[0].newtask.value == "")
      window.alert("You must enter a value in the New Task field.");
    else 
      if (document.forms[0].tasks.options[0].value == "tasks")
        document.forms[0].tasks.options[0] = null;
      var newTask = new Option();
      newTask.value = document.forms[0].newtask.value;
      newTask.text = document.forms[0].newtask.value;
      var numTasks = document.forms[0].tasks.options.length;
      document.forms[0].tasks.options[numTasks] = newTask;
      document.forms[0].newtask.value = "";
    
  

function deleteTask() 
  var selectedTask = 0;
  var taskSelected = false;
  while (selectedTask < document.forms[0].tasks.length) 
    if (document.forms[0].tasks.options[selectedTask].selected == true) 
      taskSelected = true;
      break;
    
    ++selectedTask;
  
  if (taskSelected == true)
    document.forms[0].tasks.options[selectedTask] = null;
  else
    window.alert("You must select a task in the list.");


function ascendingSort() 
  var newTasks = new Array();
  for (var i = 0; i < document.forms[0].tasks.length; ++i) 
    newTasks[i] = document.forms[0].tasks.options[i].value;
  
  newTasks.sort();
  for (var j = 0; j < document.forms[0].tasks.length; ++j) 
    document.forms[0].tasks.options[j].value = newTasks[j];
    document.forms[0].tasks.options[j].text = newTasks[j];
  


/*]]>*/
< /script>

    <title>To Do List</title >
< /head>
<body>
  <h1>To Do List</h1>
  <form action="">
    <p>New Task
      <input type="text" size="68" name="newtask" />
    </p>
    <p>
      <input type="button" value="Add Task" onclick="addTask()" style="width: 150px" />
      <input type="button" value="Delete Selected Task" onclick="deleteTask()" style="width: 150px" />
      <br />
      <input type="button" value="Ascending Sort" onclick="ascendingSort()" style="width: 150px" />
    </p>
    <p>
      <select name="tasks" size="10" style="width: 500px">
        <option value="tasks">Tasks</option>
      </select>
    </p>
  </form>
</body>

【问题讨论】:

【参考方案1】:

当您删除所有任务时,您的select 为空,没有options

您需要在 addTask 函数中使用

来保护您的状况
document.forms[0].tasks.options.length > 0

类似这样的:

if (document.forms[0].tasks.options.length > 0 && document.forms[0].tasks.options[0].value == "tasks")
    document.forms[0].tasks.options[0] = null;

见code updated

【讨论】:

【参考方案2】:

当所有任务都被删除时,然后

            document.forms[0].tasks.options[0].value //throw an error as 

            document.forms[0].tasks.options[0] //is undefiend

所以我一直作为

             if (typeof document.forms[0].tasks.options[0] != 'undefined' && document.forms[0].tasks.options[0].value == "tasks")
                    document.forms[0].tasks.options[0] = null;

【讨论】:

【参考方案3】:

您的代码在此处崩溃,您可以在浏览器的 jsconsole 中看到

 if (document.forms[0].tasks.options[0].value == "tasks")
在将 options[0] 设置为 null 后,您尝试读取 options[0].value

document.forms[0].tasks.options[selectedTask] = null;
删除项目时尽量不要破坏你的数据结构

【讨论】:

以上是关于JavaScript/HTML 中的待办事项列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用React删除待办事项列表中的项目

无法在初始渲染中显示待办事项列表

待办事项列表应用程序中搜索字段文本中的每个更新的条件渲染

如何根据优先级升序排列待办事项列表

我在这个 React 应用程序中的待办事项列表没有出现

如何从 laravel 的列表中删除待办事项列表项?