本文教你通过 JavaScript 为指定 class 的按钮同时绑定点击和回车事件,实现跳转到目标页面(如支付页),且不破坏原有表单提交行为——关键在于在提交成功后跳转,而非阻止默认行为。
本文教你通过 JavaScript 为指定 class 的按钮同时绑定点击和回车事件,实现跳转到目标页面(如支付页),且不破坏原有表单提交行为——关键在于在提交成功后跳转,而非阻止默认行为。
在实际开发中,你不能简单地用 location.href = '...' 直接替换按钮的默认行为,否则会跳过表单提交,导致用户无法真正创建账号。原问题中的代码示例虽能触发跳转,但会绕过 <button type="submit"> 的核心职责:提交表单数据。正确做法是监听表单提交成功后的跳转时机,而非拦截按钮事件。
✅ 推荐方案:监听表单 submit 事件(更健壮、语义正确)
假设你的按钮位于一个 <form novalidate> 内,应优先为整个表单添加监听器:
<form id="signupForm" novalidate><!-- 其他输入字段 --><button class="yWSHVqDY3QXtLSenwRoA" data-test="create-account-create-button" type="submit"><span>Create account</span></button></form>
document.getElementById('signupForm').addEventListener('submit', async function (e) {e.preventDefault(); // 阻止默认提交,以便我们控制流程// 1. 收集表单数据并发送注册请求(示例使用 fetch)const formData = new FormData(this);try {const response = await fetch('/api/register', {method: 'POST',body: formData});if (!response.ok) throw new Error('Registration failed');// 2. 注册成功 → 跳转至支付页window.location.href = '/payment'; // 或 'https://yourdomain.com/payment'} catch (err) {console.error('Registration error:', err);alert('Failed to create account. Please try again.');}});
注意事项:
click/keydown:用户可能通过 Tab + Enter 触发提交,也可能直接点击;但表单提交的唯一可靠入口是 submit 事件,它涵盖所有合法提交方式(包括按钮点击、Enter 键、甚至 form.submit() 调用)。.yWSHVqDY3QXtLSenwRoA 是自动生成的 CSS 类(常见于 styled-components 或 Emotion),极易变动。应改用稳定的选择器,如 data-test="create-account-create-button" 或给表单加 id。303 See Other 重定向至支付页,避免前端跳转逻辑失效或被绕过。? 总结:真正的“保留原始功能”意味着完整执行注册流程(校验 → 提交 → 服务端处理 → 成功响应),再跳转。把跳转逻辑放在异步请求的 then 或 await 后,才是兼顾功能与体验的正确实践。