首页 > 解决方案 > 填写所有必填字段时如何防止默认提交

问题描述

<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!!!!!");
})

标签: javascripthtmlformsevent-handlingdom-events

解决方案


好吧,我不知道您为什么希望它仅在填写所有必填字段时才阻止默认提交。

但是,既然你问了,你可以使用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 元素上运行此 t 才能工作,这将花费更多时间来编写。


推荐阅读