Validation validate возвращает true с пустой обязательной текстовой областью в форме

У меня есть форма, в которой я хочу проверить текстовое поле:

<form action="" id="dialog">
        <textarea name="message-text" class="message-text" rows="5" cols="30" required="true" style="margin-top: 35px;margin-bottom: 25px"></textarea>
        <span style="color: red; display: none" class="error-message">An error occured while sending the message.</span>
        <a href="" class="button send-message">Send</a>
        <a href="" class="button cancel-sending">Cancel</a>
</form>

Когда я звоню

$('#dialog').valid()

с пустой текстовой областью он возвращает true, хотя я ожидаю, что он вернет false. Внутренне, когда он собирает правила для формы, значение element.attr('required') по какой-то причине оказывается равным 'required', когда значение атрибута равно 'true', а требуемый метод возвращает 'dependency-mismatch'. Я не уверен, что эти вещи означают, но, вероятно, они связаны с тем, что valid() возвращает true, а не false, как я ожидаю.

Что я здесь делаю неправильно?

Редактировать: извините за мою ошибку в вопросе, я имел в виду .valid(), а не .validate()


person axk    schedule 30.08.2013    source источник
comment
Я вижу, вы сбиты с толку, потому что .validate() ведет себя не так, как вы ожидали. Однако вы также не объяснили, чего вы действительно пытаетесь достичь.   -  person Sparky    schedule 30.08.2013
comment
Извините, я имел в виду, что я вызываю .valid(), а не .validate(), это, конечно, имеет большое значение   -  person axk    schedule 30.08.2013
comment
У меня есть одна текстовая область, которая требуется, и я пытаюсь проверить, действительна ли форма, т.е. если текст не пуст. Я не делаю это стандартным способом, когда плагин реагирует на отправку формы, потому что форма не отправлена, на самом деле я только добавил тег формы, чтобы иметь возможность проверки пользователем jquery   -  person axk    schedule 30.08.2013
comment
Ваш код у меня работает нормально: jsfiddle.net/JSXxx/1   -  person Sparky    schedule 30.08.2013
comment
Вы также можете прикрепить .valid() к самому элементу. Все еще работает нормально: jsfiddle.net/JSXxx/2   -  person Sparky    schedule 30.08.2013


Ответы (1)


Цитата ОП:

Когда я вызываю $('#dialog').validate() с пустой текстовой областью, он возвращает true, хотя я ожидаю, что он вернет false. Внутренне, когда он собирает правила для формы, значение element.attr('required') оказывается по какой-то причине "требуемым", когда значение атрибута равно "true", а требуемый метод возвращает "несоответствие зависимости". Я не уверен, что эти вещи означают, но, вероятно, они связаны с тем, что функция validate() возвращает true, а не false, как я ожидаю.

Что я здесь делаю неправильно?

Я понятия не имею, что вы пытаетесь сделать здесь со всем этим. Метод .validate() обычно используется только для одной цели... инициализации плагина в вашей форме, и вы должны вызывать его один раз только при готовности DOM.

$(document).ready(function() {

    // initialize the plugin with your options
    $('#dialog').validate({
        // rules, options, and callback functions
    });

});

ДЕМО: http://jsfiddle.net/WHheY/


Если вы ищете логическое значение, сообщающее вам о статусе формы, вы захотите впоследствии вызвать метод .valid()< /a>... для этого оно и предназначено. См.: https://stackoverflow.com/a/18221081/594235

if ( $('#dialog').valid() ) {
    // something to do when the form is valid
};

Это также запускает проверку...

$('#dialog').valid();  // trigger a test

ДЕМО: http://jsfiddle.net/WHheY/2/


В противном случае вы обычно просто используете функцию обратного вызова submitHandler, которая запускается только для действительной формы, когда происходит событие отправки.

$(document).ready(function() {

    $('#dialog').validate({
        // rules, options, and callback functions,
        submitHandler: function(form) {
            // your ajax
            return false
        }
    });

});

ДЕМО: http://jsfiddle.net/WHheY/4/

person Sparky    schedule 30.08.2013
comment
Извините, я имел в виду, что вызываю .valid(), а не .validate(), это, конечно, имеет большое значение - person axk; 30.08.2013
comment
@axk, я не вижу описанной вами проблемы. См.: jsfiddle.net/JSXxx/1 и jsfiddle.net/JSXxx/2 - person Sparky; 30.08.2013