#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:
Ряд вещей:
-
Вы можете использовать
replace
для строки, одновременно используя ее для объекта jQuery. Нет$(this).replace
. Если вы хотите проверить наличие пробелов, вам нужно значение, т.е.$(this).val().replace
. -
Вы используете
$(this).insertAfter
, что означает, что элемент ввода вставляется после интервала.$(this).remove
просто удаляет элемент ввода, который, я думаю, тоже не является тем, что вам нужно. -
Вы
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. Да, извините за это. Я просто скопировал код вопроса. Я только изменил вещи, связанные с тем, что будет возвращать функция.