【问题标题】:how to validate my form field after my check box is checked?选中复选框后如何验证我的表单字段?
【发布时间】:2015-03-06 04:32:24
【问题描述】:

我创建了一个带有动态创建字段的表单。我有一个带有唯一 ID 的复选框。当用户单击该复选框时,只有这两个字段可见(“姓名和年龄”)。只需点击“年龄”字段后需要验证。

这是我的代码:

$(document).ready(function() {
    $('#person').click(function() {
        function formValidator(){
            var age = document.getElementsByName('age[]');
            for (var i = 0; i< age.length; i++) {
                if(!isNumeric(age[i], "Please enter a valid Age")){
                    return false;
                }
            }
            return true;
        }

        function isNumeric(elem, helperMsg){
            var numericExpression = /^[0-9]+$/;
            if(elem.value.match(numericExpression)){
                return true;
            } else {
                alert(helperMsg);
                elem.focus();
                return false;
            }
        }
   });
});

$(document).ready(function() {
    $('#person').click(function() {
        $('#name').attr('required','required');
        $('#age').attr('required','required');
    });
});

风格是:

.selectContainer{
    display:none;
 }

input[type=checkbox]:checked ~ .selectContainer {
    display:block;
}

HTML代码是:

<form action="" method="post" onSubmit="return formValidator()">
    <label for="name">Any Accompanying Person ?:</label>
    <input  type="checkbox" name="person" id="person" >Yes
    <div class="selectContainer">
        <br>
        <label>Person Details</label>
        <p>
            <div style="padding-left:70px;"> 
                <input type="button" value="Add Person" onClick="addRow('dataTable')" /> 
                <input type="button" value="Remove Person" onClick="deleteRow('dataTable')" /> 
            </div>
        </p>
        <table style="padding-left:50px;" id="dataTable" class="form" border="1"  >
            <tbody>
                <tr>
                    <p>
                        <td><input type="checkbox" name="chk[]" checked="checked" /></td>
                        <td>
                            <label>Name</label>
                            <input type="text" size="20" name="name[]" id="name"   >
                        </td>
                        <td>
                            <label>Age</label>
                            <input type="text" size="20" name="age[]" id="age"  >
                        </td>
                    </p>
              </tr>
           </tbody>
       </table>
       <div class="clear"></div>
       </fieldset>
   </div>
</div>
<h3>Choose Your Payment Option</h3>
<h1>
<div style="padding-left:150px;">
    <input type="radio" name="type" value="visa">VISA/MASTER CARD:<br />
    <input type="radio" name="type" value="cheque"> CHEQUE/DEMAND DRAFT<br />
    <input type="radio" name="type" value="neft">NEFT<br /><br/>
</div>
<label></label>
<input type="submit" name="submit" value="submit"><br />
</form>

问题:通过单击复选框(“任何陪同人员?:”)成功验证表单字段“年龄”。问题是当用户尝试提交表单而不单击该复选框时,所有这些都要求 validate 。怎么得到这个称呼?请帮忙

【问题讨论】:

  • 修复代码缩进会有帮助。您试图从 submit 处理程序中将 formValidator 作为全局调用,但是它在传递给 $('#person').click() 的函数中声明,因此无法访问。
  • 那么称呼是什么?

标签: javascript jquery html validation


【解决方案1】:

将所有 javascript 函数带入点击事件之外。试试这个 formValidator 函数

function formValidator(){

        if($("#person").is(":checked")) {

   var age = document.getElementsByName('age[]');
    for (var i = 0; i< age.length; i++) {
  if(!isNumeric(age[i], "Please enter a valid Age")){
    return false;
  }
    }

        }

 return true;
     }

【讨论】:

    【解决方案2】:

    验证器位于点击处理程序中,该处理程序应位于该处理程序之外(基于 document.ready())。

    此外,如果您只想验证单击该复选框的时间,您可以在 javascript 中检查它并通过复选框的名称选择它(如果它每次都有唯一的 ID)。

    function formValidator(){
        var age = document.getElementsByName('age[]');
        if($("input[name = 'chk[]']").prop('checked')){
            for (var i = 0; i< age.length; i++) {
                if(!isNumeric(age[i], "Please enter a valid Age")){
                    return false;
                }
            }
        }
        return true;
    }
    

    【讨论】:

    • 您可以将$("input[name = 'chk[]']").prop('checked') 替换为age.form['chk[]'].checked
    • 嗯,你每天都会学到新东西:)。这要简单得多。
    • 我的必填字段怎么样。这都是同样的问题。如何解决这个问题?
    • 姓名和年龄输入?如果您还需要它们,您可以检查它们是否在 formValidator 中有值。如果他们有唯一的 ID,您可以使用相同的 CSS 选择器,除了 name = 'name[]' 和 name = 'age[]',然后执行 if(!$("input[name = 'name[]']").val()){ return false; }
    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 2022-09-27
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2020-08-11
    相关资源
    最近更新 更多