【问题标题】:To Do List in JavaScript/HTMLJavaScript/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>

【问题讨论】:

    标签: javascript html arrays forms sorting


    【解决方案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;
        删除项目时尽量不要破坏你的数据结构

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多