HTML 表单默认会在按 Enter 键时提交并刷新页面;解决方法是给表单绑定一个 id,通过 JavaScript 监听 submit 事件并调用 event.preventDefault() 阻止默认行为,随后执行自定义的搜索逻辑。
先说几个关键点。表单这种默认行为,其实挺让人头疼的:你只是在输入框里敲了一下回车,结果整个页面就刷了一遍,输入的搜索词瞬间消失,什么也没发生。问题的根源,就在于浏览器的“热心肠”——它默认会帮你提交表单,无论这个表单是否指定了 action 或 method。
拿最常见的场景来说:你在一个 里只放了一个 ,没有 action 属性,也没有指定 method。这时候浏览器依然会以默认的 GET 方式,向当前 URL 发起一次请求。结果就是页面重载,搜索词被清空,你的自定义逻辑完全没机会执行。
要解决这个问题,其实只需要三步协同,逻辑非常清晰:
- 给表单一个身份标识:用
id="searchForm"或其他语义化 ID,方便 JavaScript 精确绑定事件。 - 阻止默认提交:通过
event.preventDefault()终止页面刷新,这是核心步骤。 - 执行你的搜索逻辑:读取输入框的值(
this.elements.search.value),然后发起 AJAX 请求、过滤本地数据或跳转到搜索结果页,随你发挥。
来看一个完整的 HTML 结构示例:
对应的 JavaScript 建议放在
