如何使用jQuery Validate插件来定位输入而不使用name属性?

时间:2011-10-21 19:46:54

标签: jquery asp.net validation jquery-validate

我正在使用流行的jQuery验证插件:Validation

众所周知,这个插件效果很好,经过深思熟虑。但是,我正在使用一个asp.net应用程序,它自动为我的所有输入字段生成名称属性。此外,它生成的名称似乎无效,无法在jquery插件中使用。

我想知道是否有另一种使用此插件定位输入元素的方法,或者如果name属性是唯一的方法。

    <script>
jQuery.validator.messages.required = "";
    $(document).ready(function () {
        $('#form1').validate({
        debug: true;
        invalidHandler: function(e, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                    ? 'You missed 1 field. It has been highlighted below'
                    : 'You missed ' + errors + ' fields.  They have been highlighted below';
                $("div.error span").html(message);
                $("div.error").show();
            } else {
                $("div.error").hide();
            }
        },

            rules: {
                <%=firstName.UniqueID%>: {
                    required: true,
                    minlength: 6,
                },
                email: {
                    required: true,
                    email: true,
                },
                password: {
                    required: true,
                    minlength: 6,
                },
                verify:{
                    required: true,
                    equalTo: "#password",
                }


            }
        });
    });

</script>

我尝试用属性的服务器端调用替换名称(显示在“firstName”中),该调用正确地回调了该名称。但是jquery在那时并不起作用,所以我猜测生成的名称是无效的,因为它中有“$”。

渲染:

    <script>

jQuery.validator.messages.required = "";

    $(document).ready(function () {

        $('#form1').validate({

        debug: true;

        invalidHandler: function(e, validator) {

            var errors = validator.numberOfInvalids();

            if (errors) {

                var message = errors == 1

                    ? 'You missed 1 field. It has been highlighted below'

                    : 'You missed ' + errors + ' fields.  They have been highlighted below';

                $("div.error span").html(message);

                $("div.error").show();

            } else {

                $("div.error").hide();

            }

        },



            rules: {

                ctl00$ContentPlaceHolderBody$firstName: {

                    required: true,

                    minlength: 6,

                },

                email: {

                    required: true,

                    email: true,

                },

                password: {

                    required: true,

                    minlength: 6,

                },

                verify:{

                    required: true,

                    equalTo: "#password",

                }





            }

        });

    });



</script>

HTML:

<label>Name</label>

<input name="ctl00$ContentPlaceHolderBody$firstName" type="text" id="firstName" /><br />



<label>Email</label>

<input name="ctl00$ContentPlaceHolderBody$ctl00" type="text" /><br />



<label>Password</label>

<input name="ctl00$ContentPlaceHolderBody$password" type="text" id="password" /><br />



<label>Verify Password</label>

<input name="ctl00$ContentPlaceHolderBody$verify" type="text" id="verify" /><br />



<input type="submit" name="ctl00$ContentPlaceHolderBody$submit" value="Submit" id="submit" />

1 个答案:

答案 0 :(得分:1)

文档说在设置规则选项时,任何带有非法JavaScript标识符的名称都需要用引号括起来。这是链接:http://docs.jquery.com/Plugins/Validation/Reference#Fields_with_complex_names_.28brackets.2C_dots.29

我不确定,如果它可以使用$符号,但是如果你还没有它可能值得一试。