Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未定义的处理程序?_Javascript_Html_Debugging_Javascript Debugger_Google Chrome Console - Fatal编程技术网

Javascript 未定义的处理程序?

Javascript 未定义的处理程序?,javascript,html,debugging,javascript-debugger,google-chrome-console,Javascript,Html,Debugging,Javascript Debugger,Google Chrome Console,当我运行PLNKR控制台来测试UI上的按钮时,我得到一个未定义处理程序的引用错误。我不明白,我确实在我的JS帖子中定义了它 参考此URL;我在练习Gordon Zhu的“实用JS”课程,我在第8版 ~4:00分马克 JS HTML 我认为这是因为在它出现在HTML代码中之后定义了处理程序,所以在onclick尝试注册它时,它还不存在onclick不会尝试注册它,直到被单击的元素触发onclick函数。加载它时,JavaScript会抛出一个错误。在你担心点击时的错误之前,先考虑一下这个问题。你似

当我运行PLNKR控制台来测试UI上的按钮时,我得到一个未定义处理程序的引用错误。我不明白,我确实在我的JS帖子中定义了它

参考此URL;我在练习Gordon Zhu的“实用JS”课程,我在第8版

~4:00分马克

JS

HTML


我认为这是因为在它出现在HTML代码中之后定义了处理程序,所以在onclick尝试注册它时,它还不存在

onclick不会尝试注册它,直到被单击的元素触发onclick函数。加载它时,JavaScript会抛出一个错误。在你担心点击时的错误之前,先考虑一下这个问题。你似乎有一个额外的}。使用诸如ESLint之类的工具来追踪它。由于打字错误而投票关闭
var todoList = {
  todos: [],
  displayTodos: function() {
    if (this.todos.length === 0) {
      console.log('Your todo list is empty!');
    } else {
      console.log('My todos:');
      for (var i = 0; i < this.todos.length; i++) {
        if (this.todos[i].completed === true) {
          console.log('(x)', this.todos[i].todoText);
        } else {
          console.log('( )', this.todos[i].todoText);
        }
      }
    }
  },
  addTodo: function(todoText) {
    this.todos.push({
      todoText: todoText,
      completed: false
    });
    this.displayTodos();
  },
  changeTodo: function(position, todoText) {
    this.todos[position].todoText = todoText;
    this.displayTodos();
  },
  deleteTodo: function(position) {
    this.todos.splice(position, 1)
    this.displayTodos();
  },
  toggleCompleted: function(position) {
    var todo = this.todos[position];
    todo.completed = !todo.completed;
    this.displayTodos();
  },
  toggleAll: function() {
    var totalTodos = this.todos.length;
    var completedTodos = 0;

    for (var i = 0; i < totalTodos; i++) {
      if (this.todos[i].completed === true) {
        completedTodos++;
      }
    }
  }

    if (completedTodos === totalTodos) {
      for (var i = 0; i < totalTodos; i++) {
        this.todos[i].completed = false;
      }

    } else {
      for (var i = 0; i < totalTodos; i++); {
        this.todos[i].completed = true;
      }
    }

  this.displayTodos();
}
};

var handlers = {
  displayTodos: function() {
    todoList.displayTodos();
  },
  toggleAll: function() {
    todoList.toggleAll();
  },
  addTodo: function() {
    var addTodoTextInput = document.getElementById('addTodoTextInput');
    todoList.addTodo(addTodoTextInput.value);
    addTodoTextInput.value = '';
  },
  changeTodo: function() {
    var changeTodoPositionInput = document.getElementById('changeTodoPositionInput');
    var changeTodoTextInput = document.getElementById('changeTodoTextInput');
    todoList.changeTodo(changeTodoPositionInput.valueAsNumber, changeTodoTextInput.value);
    changeTodoPositionInput.value = '';
    changeTodoTextInput.value = '';

  }
};
<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
  </head>

  <body>
    <h1>Todo List</h1>

    <div>
      <button onclick="handlers.displayTodos()">Display Todos</button>
      <button onclick="handlers.toggleAll()">Toggle All</button>
    </div>

    <div>
      <button onclick="handlers.addTodo()">Add</button>
      <input id="addTodoTextInput" type="text">
      </div>

      <div>
        <button onclick="handlers.changeTodo()">ChangeTodo</button>
        <input id="changeTodoPositionInput" type="number">
        <input id="changeTodoTextInput" type="text">
      </div>

      <script src="script.js"></script>
  </body>

  </html>