简体   繁体   English

检查是否在特定的div中填写了所有必填字段

[英]Check if all required fields are filled in a specific div

I have some form fields that are dynamically generated form the database. 我有一些表单字段是从数据库动态生成的。 There are inputs, checkboxes, radio buttons, textarea's, and select's. 有输入,复选框,单选按钮,文本区域和选择区域。 All the fields are in a parent div with ID dynamic-form-fields . 所有字段都在ID为dynamic-form-fields的父div中。 Some fields have a required attribute. 一些字段具有required属性。

This is a multi-step form so each "step/page" needs to be validated before going on to the next step. 这是一个多步骤表单,因此在继续下一步之前,每个“步骤/页面”都需要进行验证。 So it's not submitting the form. 因此,它没有提交表单。

How can I check if all the required fields in div dynamic-form-fields are filled? 如何检查div dynamic-form-fields字段中的所有必填dynamic-form-fields是否已填写?

Here's something what my HTML code looks like: 我的HTML代码如下所示:

<input type="text" name="dff[]" placeholder="Name" required>
<input type="text" name="dff[]" placeholder="Date of Birth">
<input type="text" name="dff[]" placeholder="Email" required>
<input type="radio" name="gender" value="Male" required>
<input type="radio" name="gender" value="Female" required>
<select name="pet">
    <option value="dog">Dog</option>
    <option value="cat">Cat</option>
    <option value="bird">Bird</option>
</select>

<button id="check">Check</button>

<script>
    document.getElementById("check").onclick = function () {
        if() {
            alert('error please fill all fields!');
        }
    };
</script>

As you see, some fields are required and some are not. 如您所见,某些字段是必填字段,而某些则不是必需字段。 It is different every time so the solution has to be dynamic. 每次都不同,因此解决方案必须动态。 There are also different types of input's such as select, radio, checkbox, text, etc... How can I make sure every " required " field inside the div ID dynamic-form-fields is filled? 输入的类型也不同,例如select,radio,checkbox,text等。如何确定div ID dynamic-form-fields字段内的每个“ required ”字段都已填充?


What i've tried: 我试过的

Maybe something like this but how do I get every type of input (text, radio, checkbox, select, etc...) under the div ID dynamic-form-fields ? 也许是这样,但是如何在div ID dynamic-form-fields下获取每种类型的输入(文本,单选,复选框,选择等)?

$('#dynamic-form-fields input:required').each(function() {
  if ($(this).val() === '')
      alert('error please fill all fields!');
});

 document.getElementById("check").onclick = function() { let allAreFilled = true; document.getElementById("myForm").querySelectorAll("[required]").forEach(function(i) { if (!allAreFilled) return; if (!i.value) allAreFilled = false; if (i.type === "radio") { let radioValueCheck = false; document.getElementById("myForm").querySelectorAll(`[name=${i.name}]`).forEach(function(r) { if (r.checked) radioValueCheck = true; }) allAreFilled = radioValueCheck; } }) if (!allAreFilled) { alert('Fill all the fields'); } }; 
 <div id="myForm"> <input type="text" name="dff[]" placeholder="Name" required> <input type="text" name="dff[]" placeholder="Date of Birth"> <input type="text" name="dff[]" placeholder="Email" required> <input type="radio" name="gender" value="Male" required> <input type="radio" name="gender" value="Female" required> <select name="pet" required> <option value="">Select a pet</option> <option value="dog">Dog</option> <option value="cat">Cat</option> <option value="bird">Bird</option> </select> </div> <button id="check">Check</button> 

You can check is required attribute available or not as, 您可以检查required属性是否可用,

$('#dynamic-form-fields').each(function() {
    var hasRequired = $(this).attr('required');
    if (typeof hasRequired !== "undefined" && hasRequired !== false) {
        // This is required inputs.
    }
}

Ref : Link 参考: 链接

You could keep separate checks based on input type, consider the following: 您可以根据输入类型进行单独检查,请考虑以下事项:

 var isEmpty = false; $("#check").on('click', function() { isEmpty = false $('input[type=text]:required').each(function() { if ($(this).val() === '') isEmpty = true; }); var radioSelected = false; //$('input[name=gender]:required').each(function() { $('input[type=radio]:required').each(function() { if ($(this).is(':checked')) radioSelected = true; }); if (!radioSelected) isEmpty = true; if ($("[name=pet]").val() == "") isEmpty = true; //if (!$(".cb").is(":checked")) // isEmpty = true; if (isEmpty) alert('error please fill all fields!'); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" name="dff[]" placeholder="Name" required> <input type="text" name="dff[]" placeholder="Date of Birth"> <input type="text" name="dff[]" placeholder="Email" required> <input type="radio" name="gender" value="Male" required> <input type="radio" name="gender" value="Female" required> <select name="pet" required> <option value="dog">Dog</option> <option value="cat">Cat</option> <option value="bird">Bird</option> </select> <!--<input type="checkbox" class="cb" required />--> <button id="check">Check</button> 

You can use :invalid to do this. 您可以使用:invalid来做到这一点。

Demo: 演示:

 $('#check').on("click", function(){ let valid = true; $('[required]').each(function() { if ($(this).is(':invalid') || !$(this).val()) valid = false; }) if (!valid) alert("error please fill all fields!"); else alert('valid'); }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" name="dff[]" placeholder="Name" required> <input type="text" name="dff[]" placeholder="Date of Birth"> <input type="text" name="dff[]" placeholder="Email" required> <input type="radio" name="gender" value="Male" required> <input type="radio" name="gender" value="Female" required> <select name="pet" required> <option selected disabled>Select a pet</option> <option value="dog">Dog</option> <option value="cat">Cat</option> <option value="bird">Bird</option> </select> <button id="check">Check</button> 

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

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