【发布时间】:2021-12-30 13:26:01
【问题描述】:
考虑以下代码:
$("button[type='submit']").click(function(e){
if($(this).closest("form").checkValidity()) {
$(this).closest("form").reportValidity();
}
e.preventDefault();
alert("Never happens!!!");
});
如果输入数据有效,然后我按下提交按钮,则提交 php 表单,而不会让 e.preventDefault(); 和 alert("Never happens!!!"); 执行。我怀疑这是因为checkValidity 和reportValidity 返回true,它充当return true; 语句。
考虑这段代码:
$("button[type='submit']").click(function(e){
e.preventDefault();
alert("Does happen!!!");
});
这次我看到了警报,意思是preventDefault 阻止了表单的提交。即使checkValidity和reportValidity返回true,我有什么奇怪的,它们如何充当jquery点击函数的返回语句?
需要注意的是,下面的方法也不起作用:
$("button[type='submit']").click(function(e){
e.preventDefault();
if($(this).closest("form").checkValidity()) {
$(this).closest("form").reportValidity();
}
alert("Never happens!!!");
});
我认为preventDefault 阻止checkValidity 和reportValidity 正常工作并迫使它们返回false,这在某种程度上充当return false; 语句导致alert 不被执行。
另一种可能的解释是调用checkValidity 或reportValidity 会导致表单被提交。不知道为什么会这样。
请参考官方文档说明。
【问题讨论】:
-
我猜你的脚本坏了。例如,如果验证插件的脚本加载失败,调用
$(this).closest("form").checkValidity()将导致错误并阻止任何进一步的脚本命令执行。这解释了为什么您永远不会看到警报。您检查浏览器控制台是否有错误消息? -
@ChrisG Ahhh。比如天真的错误......我应该使用
$(this).closest("form")[0]。我没有使用任何插件,而是使用原生 html5 验证 api。
标签: javascript jquery forms validation html5-validation