jQuery验证equalTo

时间:2015-06-22 12:50:49

标签: javascript jquery validation

我想使用jQuery validate()插件使用equalTo来验证签名字段,基本上签名字段必须与第一个名字和姓氏字段匹配,这是否可以使用validate()插件?

http://jqueryvalidation.org/equalTo-method/告诉我如何检查它是否等于另一个输入,但是它可以像下面这样做吗?

equalTo:field1 + field2

反对

equalTo:field1,

基本上我要问的是,我们可以连接2个字段并在validate()插件中使用它吗?

                    <li>
                        <label>
                            First Name <span class="form-required">*</span>
                        </label>
                        <div>
                            <input type="text" class="form-textbox"  id="first_name" name="first_name" size="20" value="" required/>
                        </div>
                    </li>
                    <li>
                        <label>
                            Family Name <span class="form-required">*</span>
                        </label>
                        <div>
                            <input type="text" class="form-textbox"  id="last_name" name="last_name" size="20" value="" required/>
                        </div>
                    </li>

$("#myForm").validate({

    // Specify the validation rules
    rules: {

        //First Name
        first_name: "required",

        //Family Name
        last_name: "required"
   },

    // Specify the validation error messages
    messages: {

        //First Name
        first_name: "Please enter your first name",

        //Family Name
        last_name: "Please enter your family name"
   },

    submitHandler: function(form) {
        form.submit();
    }
});

});

2 个答案:

答案 0 :(得分:1)

我已经快速解决了这个问题。虽然这可能不是首选的方式,但效果很好。

  • 添加隐藏的输入#fullname
  • 使用以空格分隔的名字和姓氏的值填充隐藏的输入
  • 验证隐藏输入的签名

&#13;
&#13;
$("#name1, #name2").on("change", function() {
    $("#fullname").val( $("#name1").val() + " " + $("#name2").val() );
});

jQuery.validator.setDefaults({
  debug: true,
  success: "valid"
});

$( "#myform" ).validate({
  rules: {
    name1: "required",
    name2: "required",
    signature: {
      equalTo: "#fullname"
    }
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.min.js"></script>
<form id="myform">
    <label for="1st name">1st name</label>
    <input id="name1" name="name1" />
    <br/>
    <label for="2 name">2 name</label>
    <input class="left" id="name2" name="name2" />
    <br/>
    <label for="2 name">Signature</label>
    <input class="left" id="signature" name="signature" />
    <input type="hidden" id="fullname" />
    <input type="submit" value="Validate!" />
</form>
&#13;
&#13;
&#13;

修改

对于不区分大小写的情况,您必须向验证程序添加自定义方法,并在添加的方法中进行检查。看看以下内容。

jQuery.validator.addMethod("anotherNotEqualTo", function(value, element, param) {
    return this.optional(element) || value.toLowerCase() === $(param).val().toLowerCase();
},  "Signature must be equal to your name!");

$( "#myform" ).validate({
  rules: {
    name1: "required",
    name2: "required",
    signature: {
        anotherNotEqualTo: "#fullname"
    }
  }
});

以下是link to the updated fiddle,以防万一。

希望有所帮助。

答案 1 :(得分:0)

基本上没有。您需要编写自己的验证器功能。 E. g。像这样:

jQuery.validator.addMethod("concatEqualsTo",
                           function (value, element, params)
                           {
                              var concatedVal;
                              $(params).each(function(index, val)
                                             {
                                                concatedVal += $(val).val();
                                             }
                              );

                              return val === concatedVal;
                           }
);

这只是一个动态的例子。不确定它是否有效,但它应该。在调用$(document).ready之前,将此代码放在脚本的末尾。

编辑:有关文档,请参阅此处:http://jqueryvalidation.org/jQuery.validator.addMethod

你还应该传递一个你想在jQuery Notation中连接的元素数组。