Moikka,
olen yrittänyt nyt vääntää omaa kikkailua lomakkeeseen:
<script type="text/javascript"> function show_confirm() { var con = confirm("Haluatko luoda listan?"); if (con == true) { /*alert("luodaan lista!");*/ this.disabled=true; /* pistetään kyseinen disabloidaan submit-napit */ this.value='Luo listaa..odota!'; /* vaihdetaan teksti luonnin ajaksi */ document.form.lomake.submit(); /* lähetetään lomake */ return true; } else { /*alert("ei luoda listaa..!");*/ return false; /* tässä kohtaa on jotain mätää, koska peruutuksessa lista luodaan silti..*/ } } </script>
<form action='". $_SERVER["PHP_SELF"] ."' method='POST' name='lomake'> <input type='submit' name='luo' value='luo lista' onclick="return show_confirm();"> </form>
Osaakohan joku fiksata tuon pätkän toimivaksi.. Ongelma on juuri tuo listan lähettymisen jatkuminen vaikka confirmaatiossa painaa "peruuta" nappia..
Lisäys: Ja niin joo, tarkoituksena on vain saada lomake niin, että kaksoisklikkausta ei päsäe käymään..
Jos tuon koodisi ihan suoraan copypasteaa html-tiedostoon ja testaa, niin se toimii (ei lähetä lomaketta jos klikkaa peruuta). Vaikea siis sanoa, mikä siinä on vialla, koska tänne laittamasi koodi on ilmeisesti erilainen kuin se, millä ongelma sinulla esiintyy.
Testasin Chromella, joten tietty voisin testata myös käyttämälläsi selaimella, jos kerrot mikä se on.
Yleisesti ottaen laittaisin tuon tyyppisen (formin validoinnin) ennemmin formin onsubmit -eventiin kuin submit-napin onclickiin.
Käytin IE9:iä tässä..
Kokeilin sitä <formia> mutta en saanut (jostain syystä) tuota submit:ia sitten pois käytöstä klikkauksen jälkeen..
Yhtälailla näytti toimivan suoraan IE9:ssä.
Peruutuspuolen pitäisi kyllä olla kunnossa, mutta tuo OK-puolen koodi ei voi mitenkään toimia. Funktiossa this ei viittaa suinkaan nappiin tai lomakkeeseen vaan koko ikkunaan. Funktiosta ei myöskään pidä kutsua submit-metodia, vaan lomake lähtee ihan itsestään, jos sitä ei erikseen estetä.
Tässä on toimiva ja siistimpi ratkaisu:
<script> function varmista(lomake) { if (lomake.nappi.disabled || !confirm("Jatketaanko?")) { return false; } lomake.nappi.disabled = true; lomake.nappi.value = "Hetkinen..."; return true; } </script> <form action="?" method="POST" onsubmit="return varmista(this);"> <input type="submit" name="nappi" value="Jatka" /> </form>
Sivuhuomio: Älä käytä PHP_SELF-arvoa, jos et erityisesti tiedä tarvitsevasi sitä, ja jos käytät, muista htmlspecialchars XSS-injektion estämiseksi. Kuitenkin useimmissa tapauksissa haluamasi toiminto on turvallisesti ja lyhyesti jokin seuraavista: action="" (sama sivu samoilla GET-parametreilla), action="?" (sama sivu ilman GET-parametreja), action="tiedosto.php" (eri sivu).
Oliskoshan tässä muuten joku juttu nyt sen kanssa, että teen whilenä tietokannasta neljä ei <formia>..? Jostain syystä se ei kohdistu oikeana lomakkeeseen tuo onchange?
Onko niillä whilessä luoduilla lomakkeilla uniikki nimi tai id?
niissä on lomakkeen nimenä jarjestysnumero
<form action='' method='POST' name='$jaksoid' onsubmit='return varmista(this);'>
$jaksoid = uniikki
Mihin tarvitset lomakkeen nimeä? Mitä tarkoittaa "ei kohdistu oikeana lomakkeeseen tuo onchange"? Mikä onchange? Miten ei kohdistu? Mitä pitäisi tapahtua ja mitä tapahtuu?
Siis, mulla tulee whilellä <form name='lomake'></form> monta peräkkäin (eli monta samalla nimellä olevaa lomaketta).
Auttaisi varmaan, jos muuttaisit sitten sitä nimeä whilen sisäpuolella eri kierroksilla. Ei se itsestään muutu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.