Sivustollani on lomakkeen tarkistusta varten alla oleva javascript, mutta sen submit toiminto ei toimi.
Pätkä on siis kopioitu lähes täysin javascript oppaasta
<script type="text/javascript"> function TarkistaLomake() { var tila = 1; var kayttajatunnus = document.reg.username.value.length; if(kayttajatunnus == 0){ alert("Ole hyvä ja täytä myös kenttä \"Käyttäjätunnus\" "); tila = 0; } var sp_osoite = document.reg.e-mail.value; if(sp_osoite.indexOf("@") == -1){ alert("Antamasi sähköpostiosoite ei ole kelvollinen!"); tila = 0; } var psw1 = document.reg.password1.value; var psw2 = document.reg.password.value; if(psw1 != psw2){ alert("Antamasi salasanat eivät täsmää!"); tila = 0; } if(tila) { document.forms[0].submit(); } } </script>
Ja itse lomake:
<?php echo' <h1> Uuden käyttäjän lisääminen:</h1><br /><p> *-merkityt kohdat ovat pakollisia. <form action="index.php?page=käyttäjän_lisääminen&toiminto=lisaa" method="post" name="reg" /> <table> <tr><td><p>*Uusi käyttäjätunnus :</p></td><td> <input type="text" name="username" size="15" /></td></tr> <tr><td><p>*Uusi salasana:</p></td><td> <input type="password" name="password1" size="15" /></td></tr> <tr><td><p>*Varmista uusi salasana:</p></td><td> <input type="password" name="password2" size="15" /></td></tr> <tr><td><p>Nimi:</p></td><td> <input type="text" name="name" size="15" /></td></tr> <tr><td><p>Sähköposti:</p></td><td> <input type="text" name="e-mail" size="15" /></td></tr> <tr><td><p>Minulle saa lähettää tiedotteita sähköpostin välityksellä:</p></td><td> <input type="checkbox" name="mainos" /></td><td></td></tr> <tr><td><p>Sähköpostiosoitteita ei luovuteta Optotekin ulkopuolelle.</p></td><td></td></tr> <tr><td><p>Puhelinnumero:</p></td><td> <input type="text" name="telephone" size="15" /></td></tr> <tr><td><p>Katuosoite:</p></td><td> <input type="text" name="address" size="15" /></td></tr> <tr><td><p>Postinumero:</p></td><td> <input type="text" name="zipcode" size="15" /></td></tr> <tr><td><p>Kunta:</p></td><td> <input type="text" name="kunta" size="15" /></td></tr> <tr><td><p>*Käyttöoikeudet:</p></td><td> <select name="author"> <option value="normal">Normaali käyttäjä</option> <option value="admin">Admin</option> </select></td></tr> </table> <input type="button" value="Lisää käyttäjä" onclick="TarkistaLomake()" /></form>'; ?>
En jaksanut paljoa perehtyä koodiin, mutta tämä pisti silmään:
document.reg.e-mail.value
JavaScriptissä '-'
ei ole sallittu nimissä, joten tuo on sama kuin (document.reg.e) - (mail.value)
. Kokeile tätä:
document.reg["e-mail"].value
Toinen vaihtoehto on muuttaa elementin nimeä HTML:ssä, esimerkiksi "email"
ei tuottaisi mitään ongelmia.
Sähköpostiosoitteen tarkastaminen onnistuu kätevämmin ja luotettavammin säännöllisellä lausekkeella. Googlella löytyy esimerkkejä.
Edit: Toisen salasanakentän nimi on "password2"
, mutta koodissa lukee pelkkä "password"
. Tämäkin taitaa olla virhe.
Jep siinähän ne virheet oli. Kiitos funktio.
Nyt toimii muuten hyvin, paitsi lähettää lomakkeen väärälle käsittelijälle (sivulla sijaitsee toinen submit ylempänä koodissa. Minkälainen atribuutti täytyy antaa submitille, jotta toimii? Mitä arvoja sille yleensäkkään voi antaa? En oo kovin haka javascriptissä.
Huomannet, että funktio päättyy "document.forms[0].submit()", siis lähetetään sivun ensimmäinen formi. Korjaa tuo.
Mielestäni parempi tapa on palauttaa funktiosta true tai false sen mukaan, olivatko tiedot kunnossa. Vielä kun submitin onclick-tapahtuman alkuun lisää sanan "return", lopputuloksena on nappula, joka lähettää formin vain, jos tiedot ovat kunnossa. Funktioon ei tällöin tarvita lainkaan tuota submit-riviä, jossa nytkin oli virhe. (En tiedä aivan tarkkaan, miten asioiden kuuluu standardin mukaan olla, mutta näin ainakin on toiminut eri selaimilla.)
function tarkista() { if (document.lomake.nimi.value.length < 5) { alert("Keksi pitempi nimi!"); return false; } // Tänne päästiin, kaikki kunnossa! return true; } ... <input type="submit" onclick="return tarkista()" value="Lähetä!" />
Tuo Metabolixin returnilla toimiva versio olikin huomattavasti selkeämpi minulle, kuin tuo oppaan versio. Kiitos siitä, nyt sain toimimaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.