填写所有必填字段时如何防止默认提交
How to prevent default submission when ALL required fields are filled in
<div class="container">
<form action="">
<fieldset id="contactform">
<legend>Contact Information</legend>
<div id="name">
<div class="info">
<label for="name">Name*<br><br></label>
<input type="text" required>
</div>
</div>
<div id="email">
<div class="info">
<label for="email"> Email*<br><br></label>
<input type="email" required>
</div>
</div>
<div id="msg">
<div class="info">
<label for="message"> Your Message*<br><br></label>
<textarea required id="textarea" cols="25" rows="5"></textarea>
</div>
</div>
<div id="sub">
<input id ="defaultsub" type="submit">
</div>
</fieldset>
</form>
</div>
这是我目前所拥有的,它阻止了默认提交,除了它摆脱了 html5 验证。我想知道如何在我的代码中同时包含两者?
document.getElementById("defaultsub").addEventListener("click", function(event){
event.preventDefault();
console.log("Prevent default submission");
alert("ALERT!!!!!");
})
好吧,我不知道为什么您希望它仅在填写所有必填字段时阻止默认提交。
但是,既然你问了,你可以使用 document.querySelector('form')
.checkValidity() 方法来检查表单是否有效。在你的情况下,你可以像这样使用它
document.getElementById("defaultsub").addEventListener("click", function(event){
if(document.querySelector('form').checkValidity()){
event.preventDefault();
console.log("Prevent default submission");
alert("ALERT!!!!!");
}
})
仅当表单有效(如果所有必填字段都已填写)
,这将阻止默认表单提交
编辑:
您可能必须 运行 checkValidity()
所需的 INPUT 元素而不是整个 FORM 元素才能使此 tto 工作,这将花费更多时间来编写。
尝试以下操作,您需要检查是否缺少任何字段:
document.getElementById("defaultsub").addEventListener("click", function(event){
var els = document.querySelectorAll('input[type=text], input[type=email], textarea');
let allFields=true;
for(let i = 0; i < els.length; i++){
if(!els[i].value.trim()){
allFields=false;
break;
}
}
if (allFields) {
event.preventDefault();
console.clear();
console.log("Prevent default submission");
}
})
<div class="container">
<form action="">
<fieldset id="contactform">
<legend>Contact Information</legend>
<div id="name">
<div class="info">
<label for="name">Name*<br><br></label>
<input type="text" required>
</div>
</div>
<div id="email">
<div class="info">
<label for="email"> Email*<br><br></label>
<input type="email" required>
</div>
</div>
<div id="msg">
<div class="info">
<label for="message"> Your Message*<br><br></label>
<textarea required id="textarea" cols="25" rows="5"></textarea>
</div>
</div>
<div id="sub">
<input id ="defaultsub" type="submit">
</div>
</fieldset>
</form>
</div>
这是我目前所拥有的,它阻止了默认提交,除了它摆脱了 html5 验证。我想知道如何在我的代码中同时包含两者?
document.getElementById("defaultsub").addEventListener("click", function(event){
event.preventDefault();
console.log("Prevent default submission");
alert("ALERT!!!!!");
})
好吧,我不知道为什么您希望它仅在填写所有必填字段时阻止默认提交。
但是,既然你问了,你可以使用 document.querySelector('form')
.checkValidity() 方法来检查表单是否有效。在你的情况下,你可以像这样使用它
document.getElementById("defaultsub").addEventListener("click", function(event){
if(document.querySelector('form').checkValidity()){
event.preventDefault();
console.log("Prevent default submission");
alert("ALERT!!!!!");
}
})
仅当表单有效(如果所有必填字段都已填写)
,这将阻止默认表单提交编辑:
您可能必须 运行 checkValidity()
所需的 INPUT 元素而不是整个 FORM 元素才能使此 tto 工作,这将花费更多时间来编写。
尝试以下操作,您需要检查是否缺少任何字段:
document.getElementById("defaultsub").addEventListener("click", function(event){
var els = document.querySelectorAll('input[type=text], input[type=email], textarea');
let allFields=true;
for(let i = 0; i < els.length; i++){
if(!els[i].value.trim()){
allFields=false;
break;
}
}
if (allFields) {
event.preventDefault();
console.clear();
console.log("Prevent default submission");
}
})