javascript - 允许 HTML 表单验证,但一旦完成就停止提交
问题描述
我知道一种阻止表单提交的方法,但是即使表单没有通过 HTML 验证,我也有一个点击事件到提交按钮并触发它。
<form id="signupform" class="signupform" onsubmit="(e)=>{e.preventDefault()};return false">
</form>
我的目标是停止页面刷新(无论是否验证),但仍然允许内置验证首先运行。
有什么建议么?
解决方案
按钮的submit
工作是submit
触发form
. 因此,对于form
元素,您无需click
在submit
按钮上设置submit
事件,而是在form
.
然后,为了在混合中引入验证,您可以submit
在处理程序中停止本机,仅当验证失败时。这是通过访问event
自动发送到每个 DOM 事件处理程序*的参数来完成的(请参阅下一段以了解警告)。您可以使用该event.preventDefault()
方法阻止本机事件发生。
*最后一点,应避免使用内联 HTML 事件处理属性,例如onsubmit
和onclick
。这是我们在制定标准之前使用了 25 年以上的技术,不幸的是,因为它们看起来很容易使用,它们被不了解的新开发人员复制。有真正的理由不使用它们,而您偶然发现了一个。您e
对事件处理函数的参数未填充对event
您认为的类似内容的引用。只有当您使用设置事件回调的现代标准方法时才会发生这种情况,即.addEventListener()
.
// Set up a submit event handler for the form
// not a click event handler for the button because
// clicking a submit button triggers the form's submit event
document.querySelector("form").addEventListener("submit", function(event){
if(document.querySelector("input").value === ""){
// Invalid data! Stop the submit!
event.preventDefault();
alert("Please fill in all fields!");
return;
}
// If the code reaches this point, validation succeeded
console.log("Form submitted");
});
<form action="https://example.com" method="post">
<input>
<button>Submit</button>
</form>
推荐阅读
- apache-spark - 如何处理 CSV 文件,其中地址列数据由逗号分隔为单列而不是 Spark 中的多列
- apache-kafka - Kafka 消费者滞后指标
- c++ - VS 在刚刚构建/创建时报告目标文件是旧的。如何关闭 /LTCG 进行测试?
- android - facebook 登录和 google plus 登录的请求代码
- r - 如何加快R中的for循环?
- spring-boot - 在 Rest Call 之后发生 DB Call 时的事务问题
- dialogflow-es - 在同一级别触发父级或意图
- ruby-on-rails - 如果表列在更新时发生更改,Assign_attributes 仅分配子 attr_accessor 值
- java - PowerShell 脚本不返回
- c++ - 如何在 C++ 中为用户定义的结构初始化最小值?