给登录表单添加注册跳转按钮时如何避免触发必填校验
问题核心原因
- 当前注册按钮的实现存在两处关键错误,直接触发了表单必填校验提示:
- 按钮未显式声明
type属性:浏览器默认会把表单内没有标注type的<button>识别为提交按钮,点击时会触发整个登录表单的校验流程,因此会弹出邮箱、密码为必填的提示。 href是<a>标签的专属跳转属性,原生<button>本身不支持该属性,就算跳过了校验流程,点击也不会正常跳转至注册页面。
- 按钮未显式声明
可行解决方案
可以根据自己的样式需求,选择以下任意一种实现,直接放在登录按钮下方即可:
方案1:使用链接标签实现(零脚本依赖,推荐)
直接用<a>标签搭配现有按钮的样式类做视觉统一,因为不属于表单提交控件,不会触发必填校验,同时天然支持跳转功能:
<a href="{{ url('register') }}" class="btn"> {{ _("Create an Account!") }} </a>
注:
class属性替换成你当前登录按钮使用的样式类,即可保证两个按钮视觉风格一致,不需要额外写样式。
方案2:保留button结构实现
如果必须使用<button>标签作为注册入口,需要补充两个关键属性修正默认行为:
- 显式声明
type="button",告知浏览器该按钮不参与表单提交流程,跳过默认校验 - 用点击跳转逻辑替代无效的
href属性
示例代码:
<button type="button" onclick="window.location.href='{{ url('register') }}'" > {{ _("Create an Account!") }} </button>
通用避坑提示
- 所有放在
<form>标签内部的交互按钮,必须显式标注对应的type属性,不要依赖浏览器的默认推断,避免出现非预期的表单提交行为。 - 不要尝试给注册按钮加
novalidate属性,那是给表单整体加的属性,会直接关掉登录本身的必填校验,反而影响登录功能的正常使用。
内容的提问来源于stack exchange,提问作者user13691227
相关产品推荐
相关产品推荐

