简体   繁体   English

为什么所需的属性在 HTML 中对我不起作用

[英]Why does the required attribute not work for me in HTML

I set a required attribute to multiple input fields, which are created and sent like the code below.我为多个输入字段设置了一个required属性,这些字段的创建和发送类似于下面的代码。 The problem is that I can send the form/field data when the fields are empty.问题是当字段为空时我可以发送表单/字段数据。 What have I done wrong with setting the required attribute?我在设置required属性时做错了什么?

 function subone() { var fl = $("#Flaeche-Grundstueckthree").val(); var zip = $("#Postleitzahl-der-Immobilie-2o").val(); var and = $("#Anrede-5a").val(); var name = $("#Name-5a").val(); var maila = $("#maila").val(); var tel = $("#Telefon-12a").val(); var data = { fl: fl, zip: zip, and: and, name: name, maila: maila, tel: tel, }; var ajaxurl = "send-data.php"; // We can also pass the url value separately from ajaxurl for front end AJAX implementations jQuery.post(ajaxurl, data, function (response) { //var data = JSON.parse(response); alert(response); }); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="row"> <div class="col-md-12"> <input type="tel" class="form-field bg-image phone w-input" maxlength="256" name="Telefon" data-name="Telefon" placeholder="Telefonnummer für Rückfragen" id="Telefon-12a" tabindex="-1" required /> </div> </div> <div class="row"> <div class="col-md-12"> <div style="display: flex; margin-bottom: 30px"> <div> <input type="checkbox" style="margin-right: 8px" required /> </div> <div style="font-size: 12px"> Durch das Anfordern der Immobilienbewertung stimme ich den Datenschutzbestimmungen zu. Ihre Daten sind bei uns geschützt und werden nicht an Dritte weitergegeben. </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <input type="button" onclick="subone();" value="Jetzt Bewertung erhalten" data-wait="Einen Moment..." class="button white-arrow vergleicher w-button" tabindex="-1" aria-hidden="true" s /> </div> </div>

You need to wrap your form in a form tag and change your button to type="submit"您需要将您的表单包装在一个form标签中,并将您的button更改为type="submit"

Edit: I moved the event handler from onclick for the button to onsubmit for the form .编辑:我将事件处理程序从button onclick移动到form onsubmit

Also, I add the below codes to prevent from submission if there is an invalid input.另外,如果输入无效,我添加了以下代码以防止提交。

if (!event.target.checkValidity()) {
    event.preventDefault();
  }

 function subone(event) { if (!event.target.checkValidity()) { event.preventDefault(); } var fl = $("#Flaeche-Grundstueckthree").val(); var zip = $("#Postleitzahl-der-Immobilie-2o").val(); var and = $("#Anrede-5a").val(); var name = $("#Name-5a").val(); var maila = $("#maila").val(); var tel = $("#Telefon-12a").val(); var data = { fl: fl, zip: zip, and: and, name: name, maila: maila, tel: tel, }; var ajaxurl = "send-data.php"; // We can also pass the url value separately from ajaxurl for front end AJAX implementations jQuery.post(ajaxurl, data, function (response) { //var data = JSON.parse(response); alert(response); }); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form onsubmit="subone(event)"> <div class="row"> <div class="col-md-12"> <input type="tel" class="form-field bg-image phone w-input" maxlength="256" name="Telefon" data-name="Telefon" placeholder="Telefonnummer für Rückfragen" id="Telefon-12a" tabindex="-1" required /> </div> </div> <div class="row"> <div class="col-md-12"> <div style="display: flex; margin-bottom: 30px"> <div> <input type="checkbox" style="margin-right: 8px" required /> </div> <div style="font-size: 12px"> Durch das Anfordern der Immobilienbewertung stimme ich den Datenschutzbestimmungen zu. Ihre Daten sind bei uns geschützt und werden nicht an Dritte weitergegeben. </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <input type="submit" value="Jetzt Bewertung erhalten" data-wait="Einen Moment..." class="button white-arrow vergleicher w-button" tabindex="-1" aria-hidden="true" s /> </div> </div> </form>

Put your input elements and button inside <form>...</from> element, and make button type as submit instead of button .将您的输入元素和按钮放在<form>...</from>元素中,并使按钮类型为submit而不是button On click of button, submit event is fired on the <form> element.单击按钮时,将在<form>元素上触发提交事件。

Check docs here 在此处查看文档

 function subone() { var fl = $("#Flaeche-Grundstueckthree").val(); var zip = $("#Postleitzahl-der-Immobilie-2o").val(); var and = $("#Anrede-5a").val(); var name = $("#Name-5a").val(); var maila = $("#maila").val(); var tel = $("#Telefon-12a").val(); console.log("submit form", tel); var data = { fl: fl, zip: zip, and: and, name: name, maila: maila, tel: tel, }; var ajaxurl = "send-data.php"; // We can also pass the url value separately from ajaxurl for front end AJAX implementations jQuery.post(ajaxurl, data, function (response) { //var data = JSON.parse(response); alert(response); }); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form onsubmit="subone()"> <div class="row"> <div class="col-md-12"> <input type="tel" class="form-field bg-image phone w-input" maxlength="256" name="Telefon" data-name="Telefon" placeholder="Telefonnummer für Rückfragen" id="Telefon-12a" tabindex="-1" required /> </div> </div> <div class="row"> <div class="col-md-12"> <div style="display: flex; margin-bottom: 30px"> <div> <input type="checkbox" style="margin-right: 8px" required /> </div> <div style="font-size: 12px"> Durch das Anfordern der Immobilienbewertung stimme ich den Datenschutzbestimmungen zu. Ihre Daten sind bei uns geschützt und werden nicht an Dritte weitergegeben. </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <input type="submit" value="Jetzt Bewertung erhalten" data-wait="Einen Moment..." class="button white-arrow vergleicher w-button" tabindex="-1" aria-hidden="true" s /> </div> </div> </form>

Here required is an html prop and it will work only if you submit the form natively but you made it with javascript avoiding native html form checks.这里需要一个 html 道具,它只有在您本地提交表单时才有效,但您使用 javascript 制作它避免了本机 html 表单检查。 Instead of onclick="subone();"而不是onclick="subone();" on your input use onsubmit="return subone();"在您的输入上使用onsubmit="return subone();" on form element and don't forget to change type="button" to type="submit" on input.表单元素上,不要忘记在输入时将type="button"更改为type="submit"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM