You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用preventDefault()无法阻止submit事件引发的页面刷新问题

问题原因及解决办法

你的问题出在事件绑定对象错误:submit事件是<form>元素的专属事件,<button type="submit">本身不会触发submit事件,所以你写的event.preventDefault()根本没被执行,点击按钮后浏览器还是会默认提交表单,导致页面刷新。

下面是两种可行的解决方式:

方式一:监听表单的submit事件(推荐)

找到按钮所在的<form>元素,给它绑定submit事件,这样既能覆盖按钮点击的场景,也能处理用户按回车提交表单的情况:

// 获取按钮所在的表单
let bookForm = document.querySelector('.submitBook').closest('form');

bookForm.addEventListener('submit', (event) => {
  event.preventDefault();
  // 后续逻辑不变
  let newBook = new Book(titleInput.value, authorInput.value, pagesInput.value, readInput.checked);
  myLibrary.push(newBook);
  console.log(myLibrary);
});

方式二:给按钮绑定click事件

如果不想操作表单元素,也可以直接给按钮绑定click事件,阻止默认行为:

let submitBookButton = document.querySelector('.submitBook');

submitBookButton.addEventListener('click', (event) => {
  event.preventDefault();
  // 后续逻辑不变
  let newBook = new Book(titleInput.value, authorInput.value, pagesInput.value, readInput.checked);
  myLibrary.push(newBook);
  console.log(myLibrary);
});

额外提醒:如果你的按钮不在<form>标签内,<button type="submit">的默认行为依然是刷新页面,这时候用方式二也能解决问题,但更规范的做法是把表单相关元素都放在<form>标签中,用方式一处理。

内容的提问来源于stack exchange,提问作者Shulee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:42:35