Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS]Blokada na wysyłanie w formularzu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
ens0re
Witam! Otóż mam formularz wzbogacony o JS. I pojawia sie taki problem, gdy po kliknięciu przycisku 'wyślij' (jeżeli sie nie wprowadziło danych, bądz chociazby 1 pola sie nie wypełniło) to pojawiał sie alert ze trzeba wypełnic. I ok. Dalej wciskam ok i tu problem. Skrypt leci dalej i uruchamia plik action="plik.php". A chodzi mi oto, żeby właśnie powróciło do formularza, po kliknięciu OK. Natomias jeżeli jest zwykły link to działa tak jak powinno. Problem pojawia sie, gdy zamiast linka do potwierdzenia/wysłania jest <input>.Z góry dzieki i pozdrawiam!

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
  6. <script type="text/javascript">
  7. function $(id){
  8. return document.getElementById(id);
  9. }
  10.  
  11. function check(){
  12. var wyslij = 1;
  13. var pola = '';
  14. if(!($("nick").value)){
  15. $("nick").style.border = '1px solid Red';
  16. pola += ' Nick';
  17. wyslij = 0;
  18. }
  19. else $("nick").style.border = '1px solid Black';
  20.  
  21. if(!($("mail").value)){
  22. $("mail").style.border = '1px solid Red';
  23. pola += ', E-mail';
  24. wyslij = 0;
  25. }
  26. else $("mail").style.border = '1px solid Black';
  27.  
  28. if(!($("tresc").value)){
  29. $("tresc").style.border = '1px solid Red';
  30. pola += ', Treść';
  31. wyslij = 0;
  32. }
  33. else $("tresc").style.border = '1px solid Black';
  34.  
  35. if(wyslij) $("formularz").sent();
  36. else alert('Wypenij pola: '+pola);
  37. }
  38.  
  39. </head>
  40. <form id="formularz" method="post" action="wyslij.php">
  41. <legend>Kontakt z administratorem</legend>
  42. <div class="form">
  43. <label for="nick">Nick:</label>
  44. <input id="nick" name="nick" class="text" type="text" />
  45. </div>
  46. <div class="form">
  47. <label for="mail">E-mail:</label>
  48. <input id="mail" name="mail" class="text" type="text" />
  49. </div>
  50. <div class="form">
  51. <label for="tresc">Treść:</label>
  52. <textarea id="tresc" name="tresc" cols="40" rows="10"></textarea>
  53. </div>
  54. <div class="form">
  55. <input id="submit" name="submit" class="submit" type="submit" value="Wyślij" onclick="check();"/>
  56. </div>
  57. </form>
  58.  
  59. </body></html>
siemakuba
Musisz zrobić tak, żeby przy zdarzeniu onSubmit zwaracana była wartośc false. W twoim przypadku, jeżeli sprawdzanie wywołujesz przy onclick dla INPUT, zrób tak:
  1. <INPUT onclick="return check()">
Do tego funkcja check() musi zwracać true|false w zależności od poprawności wypełnienia formularza lub nie.

Zamiast dawać onlick, lepiej chyba obsługiwać formularz za pomocą jego zdarzenia onSubmit.
  1. <FORM action="" method="" onsubmit="return check();">

pozdr.
ens0re
Hm. 'return check()' dałem w tym inpucie i to samo. Dodałem także w <form> to zdarzenie onSubmit i też to samo.

Edit: Już rozwiązane. Brak return false w
  1. if(wyslij) $("formularz").sent();
  2. else alert('Wypenij pola: '+pola);

Dzieki i pozdrawiam!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.