测试代码时,按“enter”后,列表中任何输入的值都会消失。
我对编程和Web开发非常陌生。请具体,以便我能理解。
function addItem(){
var item = document.getElementsByID("toDoInput").value;
var text = document.createTextNode("item");
var li = document.createElement("li");
newItem.appendChild(text);
document.getElementsByID("Ordered List").appendChild(newItem);
}
...
<head>
<link rel= "stylesheet" href = "styles.css">
</head>
<body>
<h1> To Do List </h1>
<form id = "toDoForm">
<input type = "text" id = "toDoInput">
<button type = "button" onclick = "addItem()"> Click Me </button>
</form>
<ul id = "Ordered List"></ul>
<script src="toDoList.js"></script>
...
我希望当我在列表中输入一个单词时,它会显示在下面。相反,它消失了。
任何建议都会有帮助。
你的代码大多是正确的。
但是,它有一些错误:
document.getElementsByID
无效。这是document.getElementById
newItem
没有宣布。我想你的意思是li
这两个问题都会导致错误,导致您的功能过早停止执行。您应该在浏览器的开发人员工具中熟悉控制台,您将看到它将在那里记录错误。
另外:
document.createTextNode("item")
创建一个只包含文本“item”的文本节点。您将要使用输入框中的值。submit
事件,而不是onclick
事件。
不幸的是,您必须在preventDefault
上调用onsubmit
以防止该页面在其他地方导航
您可以通过按钮键入submit
来使用按钮从表单触发提交事件这是您的代码的工作版本:
function addItem(event) {
event.preventDefault(); // don't let the form POST
const input = document.getElementById("toDoInput");
const text = document.createTextNode(input.value);
const li = document.createElement("li");
li.appendChild(text);
document.getElementById("orderedList").appendChild(li);
input.value = "";
}
<h1>To Do List</h1>
<form id="toDoForm" onsubmit="addItem(event)">
<input type="text" id="toDoInput">
<button type="submit">Click Me</button>
</form>
<ul id="orderedList"></ul>
或者,这是更好的做法,不要在标记上使用onsubmit
并使用addEventListener
绑定事件:
document.getElementById("toDoForm").addEventListener("submit", addItem);
我认为这是无意的表格提交。
当您在表单中按Enter键时,默认行为是提交表单。然后页面将创建对服务器的请求。在您的情况下,没有表单操作属性,因此您将观察页面重新加载。
可能的解决方案是
document.getElementById("YOURFORMNAMEHERE").onkeypress = function(e) {
var key = e.charCode || e.keyCode || 0;
if (key == 13) {
e.preventDefault();
}
}
如果要阻止清除和提交表单的输入键操作
function addItem() {
const input = document.getElementById("toDoInput");
const text = document.createTextNode(input.value);
const li = document.createElement("li");
li.appendChild(text);
document.getElementById("orderedList").appendChild(li);
input.value = "";
return false;
}
<form id="toDoForm" onsubmit="return addItem()">
<input type="text" id="toDoInput">
<button type="button" onclick="addItem()"> Click Me </button>
</form>
<ul id="orderedList"></ul>