Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lomakkeen lähetyksen vahvistus

Sivun loppuun

ViKiNGi [30.11.2012 11:42:46]

#

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..

Grez [30.11.2012 12:10:53]

#

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.

ViKiNGi [30.11.2012 12:38:33]

#

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..

Grez [30.11.2012 12:59:08]

#

Yhtälailla näytti toimivan suoraan IE9:ssä.

Metabolix [30.11.2012 13:07:18]

#

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).

ViKiNGi [30.11.2012 13:17:10]

#

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?

runeberg [30.11.2012 16:26:19]

#

Onko niillä whilessä luoduilla lomakkeilla uniikki nimi tai id?

ViKiNGi [30.11.2012 16:56:45]

#

niissä on lomakkeen nimenä jarjestysnumero

<form action='' method='POST' name='$jaksoid' onsubmit='return varmista(this);'>

$jaksoid = uniikki

Metabolix [30.11.2012 17:12:03]

#

Mihin tarvitset lomakkeen nimeä? Mitä tarkoittaa "ei kohdistu oikeana lomakkeeseen tuo onchange"? Mikä onchange? Miten ei kohdistu? Mitä pitäisi tapahtua ja mitä tapahtuu?

ViKiNGi [05.12.2012 14:45:22]

#

Siis, mulla tulee whilellä <form name='lomake'></form> monta peräkkäin (eli monta samalla nimellä olevaa lomaketta).

Metabolix [05.12.2012 15:16:31]

#

Auttaisi varmaan, jos muuttaisit sitten sitä nimeä whilen sisäpuolella eri kierroksilla. Ei se itsestään muutu.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta