2014-10-09 6 views
0

Я потратил час, работая над этим, поэтому я буду расстроен, когда окажется, что это просто одна цитата в неправильном месте или что-то в этом роде.Возвращение false игнорируется onsubmit

Я делаю базовую HTML-страницу для проверки базового ввода формы проверки. Если я сброшу return false в начале функции validateForm(), он будет работать так, как ожидалось. Однако, если он находится в цикле проверки (как показано ниже), он не работает и форма отправляется. (hello.php просто выводит мир привет).

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

Я чувствую, что мне не хватает чего-то очень очевидного, но не могу понять, что это такое.

<?php 
echo <<<END 
<html> 
<head> 
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script> 
    <title>Test</title> 

    <script type="text/javascript"> 
$(document).ready(function(){ 
    $("input").focus(function(){ 
    $(this).css("background-color","#cccccc"); 
    }); 
    $("input").blur(function(){ 
     $(this).css("background-color","#ffffff"); 
    }); 
}); 

function validateForm() { 
    alert("Validating");  
    $("form[name=queryForm]").find(":input[type=text]").each(function() { 
     alert("Checking " + $(this).attr('name')); 
     if($(this).val()==null || $(this).val()=="") { 
      $(this).val('REQUIRED'); 
      $(this).css("background-color","#ffbbbb"); 
      alert($(this).attr('name') + ' must not be left blank.'); 
      return false; 
     } 
    }); // end of the each function 
} 
</script> 
</head> 
<body> 
<form name="queryForm" action="hello.php" onsubmit="return validateForm();" method="post"> 
<input type="text" name="First Name"><br> 
<input type="text" name="Last Name"> 
<input type="submit" value="Submit"> 
</form> 
</body> 
</html> 
END; 
?> 

ответ

1

Использование возвращения insidw в .each() выиграл вы получите желаемый результат.

Попробуйте это:

function validateForm() { 
alert("Validating");  
var result = true; 
    $("form[name=queryForm]").find(":input[type=text]").each(function() { 
    alert("Checking " + $(this).attr('name')); 
    if($(this).val()==null || $(this).val()=="") { 
     $(this).val('REQUIRED'); 
     $(this).css("background-color","#ffbbbb"); 
     alert($(this).attr('name') + ' must not be left blank.'); 
     result =false; 
     return false; //break the each() 
    } 
}); // end of the each function 
return result; 
} 
+0

Установка varible и использовать это в качестве моего возвращения за пределы функции «конца» работает. Но почему? «Использование return inidw .each() не даст вам желаемого результата». Почему нет? Спасибо ... – lowcrawler

+0

@lowcrawler return внутри каждого() вызовет функцию обратного вызова для каждого(). Возврат false приведет к поломке каждого из них. –

1
find(":input[type=text]") 

должен быть

find("input[type=text]") 

Кроме того, вы можете вернуть переменную, которая получает набор вне .each

function validateForm() { 
    var valid = true; 
    alert("Validating");  
    $("form[name=queryForm]").find(":input[type=text]").each(function() { 
     alert("Checking " + $(this).attr('name')); 
     if($(this).val()==null || $(this).val()=="") { 
      $(this).val('REQUIRED'); 
      $(this).css("background-color","#ffbbbb"); 
      alert($(this).attr('name') + ' must not be left blank.'); 
      valid = false; 
     } 
    }); // end of the each function 
    //then return that variable 
    return valid; 
} 
Смежные вопросы