"это сообщение [0] undefined" с использованием плагина jQuery validate

Я начал использовать плагин проверки jQuery. У меня возникло несколько проблем с отображением сообщений об ошибках и вы хотели создать тестовую страницу, где я мог бы экспериментировать с несколькими вещами. Несмотря на то, что вчера я работал над настройкой, я получаю следующее сообщение:

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>

Ответ 1

Форма #myform не загружается, когда выполняется script, поэтому $('#myform') ничего не соответствует. Оберните script в готовом обработчике событий.

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

Ответ 2

Оберните свой код в функцию готовности документа, например:

$(function()
{

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

});

Ответ 3

То же самое произошло здесь. Для меня это была опечатка в моем коде:

$(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;
    });

Ответ 4

В моем случае это случается, когда вы пропускаете указание идентификатора в теге формы, где вы указали в методе проверки.