使用jQuery validate插件“this [0]未定义”消息

时间:2011-07-01 10:48:34

标签: jquery jquery-validate

我已经开始使用jQuery validate插件了。我在显示错误消息时遇到了一些问题,并希望创建一个测试页面,在那里我可以尝试一些事情。尽管昨天有相同的设置为我工作,我现在收到以下消息:

this[0] is undefined

查看jQuery代码,它在以下部分失败(特定行突出显示):

valid: function() {
    if ( $(this[0]).is('form')) {
        return this.validate().form();
    } else {
        var valid = true;
        **var validator = $(this[0].form).validate();**
        this.each(function() {
            valid &= validator.element(this);
        });
        return valid;
    }
}

从查看它,它必须认为我的验证器不是一个表单,但确实如此。真的不明白发生了什么。尝试将 valid()方法的结果打印到控制台时,代码才会失败。到目前为止,这是我的代码。感谢任何帮助。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <style type="text/css">
        th {
            text-align: center;
        }
        .labelCol {
            width: 60px;
        }
    </style>
    <script type="text/javascript" src="jquery-1.6.1.full.js"></script>
    <script type="text/javascript" src="jquery.validate.full.js"></script>
    <script type="text/javascript">
        $('#myform').validate({
                        rules: {
                            thisval: "required"
                        }
        });
        console.info($('#myform').valid());
    </script>
</head>

<body>
    <form id="myform" name="myform" action="" method="post">
        <table>
            <tr>
                <th colspan="2">Header Section</th>
            </tr>
            <tr>
                <td class="labelCol">This Title</td>
                <td class="valueCol">
                    <input type="text" name="thisval" id="thisval"
                        maxlength="45" size="45" />
                </td>
            </tr>
            <tr>
                <td>
                    <input type="submit" value="submit" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

4 个答案:

答案 0 :(得分:18)

执行脚本时未加载#myform表单,因此$('#myform')与任何内容都不匹配。将脚本包装在就绪事件处理程序中。

<script type="text/javascript">
   $(function() { // <-- add this
      $('#myform').validate({
                    rules: {
                        thisval: "required"
                    }
      });
      console.info($('#myform').valid());
   });
</script>

答案 1 :(得分:2)

将代码包装在文档就绪功能中,例如:

$(function()
{

    $('#myform').validate({
                    rules: {
                        thisval: "required"
                    }
    });
    console.info($('#myform').valid());

});

答案 2 :(得分:1)

同样发生在这里。对我来说,这是我的代码中的一个错字:

$(document).ready(function(){
    //START of validate
$('#reply').validate({
    rules:{
        message:{
            required: true,
            },  
        },
    submitHandler: function(form) {
        var data = $("#reply").serialize();
        $.ajax({
            type:"POST",
            url:"ajax/scripts/msg_crt.php",
            data:data,
            success:function(data){
                alert("Loaded");
                }
            });
        }
    });
    //END of validate
  });

$(document).on('click','#send', function(){
    if($('#replay').valid()){// <--- Here is my selector typo
        $("#replay").submit(); // <--- Here is my selector typo
        }
        return false;
    });

答案 3 :(得分:0)

在我的情况下,如果你错过了在表单标签中指定你在validate方法中指定的id,就会发生这种情况。