[英]JavaScript addEventListener on submit not working
這完全是一個新手問題,但我的第一個 JavaScript 任務遇到了嚴重的問題。 我決定學習 JS 並從一個待辦事項列表開始,現在我被困在了最開始的地方。
提交表單時應觸發的事件偵聽器不起作用。 當我更改它偵聽的事件以“單擊”、“聚焦”或“模糊”時,它可以工作,但不能與提交一起使用。 任何人都可以提供建議嗎?
附注。 event.preventDefault();
有沒有簡單的解釋event.preventDefault();
? 它有什么作用,什么時候應該使用它?
太感謝了。
我的 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<title>TODO</title>
</head>
<body>
<div id="headerDiv">
<h1>My To Do List</h1>
<form>
<input aria-label="Add a new task:" type="text" id="newTaskInput" placeholder="Do the laundry, write a new chapter...">
<input id="submitNewTaskButton" type="submit" value="+">
</form>
</div>
<div id="tasks">
<ul id="tasksList">
<li>Do the laundry</li>
<li>Walk the cat</li>
</ul>
</div>
</body>
<script type="text/javascript" src="script.js"></script>
</html>
我的 JavaScript:
let newTaskInputForm = document.getElementById('newTaskInput');
let tasksList = document.getElementById("tasksList");
let submitNewTaskButton = document.getElementById("submitNewTaskButton");
function submitNewTask() {
var newTask = newTaskInputForm.value;
var newListItem = document.createElement("li");
var newListTextNode = document.createTextNode(newTask);
newListItem.appendChild(newListTextNode);
tasksList.appendChild(newListItem);
}
newTaskInputForm.addEventListener('submit', function (event) {
event.preventDefault();
submitNewTask(event)
});
<input>
元素不養submit
事件-這是<form>
這的確是。
(換句話說,您已將偵聽器附加到錯誤的元素上)
此處進行了兩項更改,事件偵聽器添加到<form>
而不是輸入提交,還將<input>
標記更改為<button>
檢查此 SO 問題以了解它們之間的區別。
對於e.preventDefault() ,基本上它用於停止默認的 HTML 標簽行為,例如<a>
標簽在點擊時它們有時會將用戶重定向到不同的頁面或域,表單提交操作通常也會將頁面重定向到不同的頁面, e.preventDefault()將停止這種行為,並讓開發人員決定在表單提交或<a>
錨標記被點擊后應該發生什么,什么時候應該使用它:這取決於應用程序設計,所以如果您正在處理的應用程序需要一些 HTML 標簽來表現不同,例如<a>
和<form>
標簽來執行Ajax調用。
let newTaskInputForm = document.getElementById('newTaskInput'); let tasksList = document.getElementById("tasksList"); let submitNewTaskButton = document.getElementById("submitNewTaskButton"); function submitNewTask() { var newTask = newTaskInputForm.value; var newListItem = document.createElement("li"); var newListTextNode = document.createTextNode(newTask); newListItem.appendChild(newListTextNode); tasksList.appendChild(newListItem); } document.getElementById('newTaskForm').addEventListener('submit', function (event) { event.preventDefault(); submitNewTask(event) });
<!DOCTYPE html> <html lang="en"> <head> <title>TODO</title> </head> <body> <div id="headerDiv"> <h1>My To Do List</h1> <form id="newTaskForm"> <input aria-label="Add a new task:" type="text" id="newTaskInput" placeholder="Do the laundry, write a new chapter..."> <button id="submitNewTaskButton" type="submit">+ form</button> </form> </div> <div id="tasks"> <ul id="tasksList"> <li>Do the laundry</li> <li>Walk the cat</li> </ul> </div> </body> <script type="text/javascript" src="script.js"></script> </html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.