Проверка формы не выполняется

#javascript #jquery #function #validation

#javascript #jquery #функция #проверка

Вопрос:

В моей форме есть некоторые поля, которые являются обязательными, и я пометил их class="required" . Я пишу приведенный ниже jquery для проверки этой формы, но этого не происходит. Я думаю, что либо я путаюсь с вызовом двух функций, либо я не получаю нужный элемент $(this) .

 <script type="text/javascript">
    function validatemyForm() {
        $('.required').each(function() {
            if($(this).val() == "" || $(this).replace(/s/g, '').length == 0)
            {
                $(this).insertAfter('<span>This is a Required Filed</span>');
                return false;
            }
            else {
                $(this).remove();
            }
        })
        return true;
    }
</script>
  

Я вызываю форму из обработчика события onsubmit <form id="myform" onsubmit ="return validatemyForm();"> . Я неправильно использую each и this jQuery?

Комментарии:

1. Какие ошибки возникают в консоли javascript / firebug?

2. Вы заменяете $(this) , что не совсем возможно. Вы имеете в виду $(this).val().replace ?

3. @Oded: Firebug не показывает никаких ошибок, но как только я отправляю форму, я могу временно увидеть, что первое поле с class = «required» исчезает и возвращается.

4. @pimvdb: Меня не интересует $ (this).val().replace Я просто добавил его для проверки пробелов, даже если я удалю его, у меня все еще будет та же проблема.

5. Вы выполняете проверку на стороне сервера, верно?

Ответ №1:

Ряд вещей:

  1. Вы можете использовать replace для строки, одновременно используя ее для объекта jQuery. Нет $(this).replace . Если вы хотите проверить наличие пробелов, вам нужно значение, т.е. $(this).val().replace .

  2. Вы используете $(this).insertAfter , что означает, что элемент ввода вставляется после интервала. $(this).remove просто удаляет элемент ввода, который, я думаю, тоже не является тем, что вам нужно.

  3. Вы return false в each() , но это не возвращает это значение в validatemyForm функции. В этой функции вы всегда return true .

Я изменил его на это, чтобы заставить его работать: http://jsfiddle.net/DaDQT/6 /.

Ответ №2:

Ваша функция validatemyForm всегда возвращает true. То, что return false у вас там есть, находится внутри функции, переданной each . validatemyForm на этом не останавливается.

Следующее должно работать так, как вы ожидаете (непроверенный код):

 <script type="text/javascript">
    function validatemyForm() {
        var ok = true;
        $('.required').each(function() {
            if($(this).val() == "" || $(this).val().replace(/s/g, '').length == 0)
            {
                $(this).insertAfter('<span>This is a Required Field</span>');
                ok = false;
            }
            else {
                $(this).remove();
            }
        })
        return ok;
    }
</script>
  

Комментарии:

1. Нет, Это не будет как $ (this).remove(); удалит все текстовые поля. Благодаря pimvdb

2. Да, извините за это. Я просто скопировал код вопроса. Я только изменил вещи, связанные с тем, что будет возвращать функция.