19. januar 2006 - 23:41Der er
28 kommentarer og 2 løsninger
undgå dobbeltklik på submit knap
er det muligt at låse en submitknap, så man ikke kan klikke på den mere end én gang.. Det er fordi jeg har en side hvor man kan oprette en annonce med tekst+ billede. siden loader et stykke tid hvis den også skal uploade et billede til databasen, og en bruger kan derfor komme til at klikke 2 gange i træk på submitknappen hvilket gør at annoncen bliver oprettet to gange.. lidt surt:(
Det er som sådan ikke muligt at låse den nej, og den bedste måde synes jeg, er at hoppe en side og tilbage igen. Altså i det øjeblik brugeren klikker send, så har du din action i din form til en anden side. Den side, udfører så scriptet, og så sender du brugeren tilbage igen med: header("Location: sidenavn.php"); eller header("Location: ".$_SERVER['HTTP_REFERER']); Brugeren når ikke at se det, men det løser dit problem nemt og hurtigt :)
Nu er jeg ikke haj til javascript, men jeg er rimelig sikker på at du kan disable knappen vha. javascript. Du behøver jo sådan set ikke at enable den igen, da siden bliver reloadet (og dermed nulstillet) når dit script er færdigt med at opdatere databasen.
Metoden, jaw beskriver, er den, man bruger her på E - og virker somregel upåklageligt. Ellers kan du altid sætte et flag, når du klikker: <button type="submit" onclick="if(window.beenHere)return false;window.beenHere=true">Send</button>
- men du kan formodentlig ikke disable knappen i dens onclick-handler, da den afvikles før formens submit-event fyres af. Det er i hvert fald at sætte vand over til problemer ;o)
Men jeg har også noget javascript som skal tjekke nogle af felterne, altså om de er udfyldt, og det virker ikke mere.. hmmm hvad gør jeg med det?, og er dette rigtigt onsubmit="this.mySubmit.disabled=true","return validering();>
nu er problemet bare... hvis man så har trykket på submit, og man får at vide at man har glemt at udfylde et felt, kan man ikke komme til at trykke på submit igen efter man har udfyldt feltet.. dooooh
Det lader til at virke perfekt... ser det ikke umiddelbart fornuftigt ud, ell. er der kommentarer?
<script language="JavaScript"> function validering(){ if( form.gruppe.value==''){ alert("Der skal vælges en gruppe!"); form.gruppe.focus(); form.mySubmit.disabled = false; return false; } if( form.kategori.value==''){ alert("Der skal vælges en kategori!"); form.kategori.focus(); form.mySubmit.disabled = false; return false; } if( form.produkt.value==''){ alert("Produkt skal udfyldes!"); form.produkt.focus(); form.mySubmit.disabled = false; return false; } if( form.pris.value==''){ alert("Pris skal udfyldes!"); form.pris.focus(); form.mySubmit.disabled = false; return false; } if( form.tlf1.value=='') if(form.email.value=='') { alert("Telefonnr. 1 eller e-mail skal udfyldes!"); form.tlf1.focus(); form.mySubmit.disabled = false; return false; } if( form.postNr.value==''){ alert("Postnr. skal udfyldes!"); form.postNr.focus(); form.mySubmit.disabled = false; return false; }
if(form.checkbox.checked==false){ alert("Jeg har læst og forstået vedtægter for annoncering, skal afkrydses!"); form.checkbox.focus(); form.mySubmit.disabled = false; return false; }
Jo, der fik du mig :o) Jeg kunne ikke lige gennemskue meningen med den :o) Jeg ville nok foretrække at bruge denne her i stedet. Så er der ingen tvivl :o) if(form.email.value == '' && form.tlf1.value == '') { ... }
Det er hermed rettet:) Kan man egentlig validere på sådan et felt her: Det skal være en jpg ell. jpeg fil.. det står vel altid i endelsen af stien af billedfilen, ik? <tr> <td width="200"><span class="lille">Billede 1:</span></td> <td><input type="file" name="imagefile[1]"></td> </tr>
og pludselig kan man også bare tykke på submit uden at nogle af de andre felter er udfyldt. Altså dem hvis valideringskode kommer efter "..inputfile.value.."
Nu er din inputfile jo et array, så den eneste måde du kan checke de elementerer at løbe gennem form.elements arrayet og lede efter form.elements[i].type == 'file'.
Jeg vil tro at grunden til at resten af valideringen fejler er fordi den ikke kan finde feltet inputfile, og derfor afbryder scriptet.
Der er noget helt galt med din validerings funktion. Den kan kun virke i én bestemt, buggy browser (læs: IE) ;o)
Din form bør se sådan ud: <form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="post" name="form" onsubmit="return validering(this)">
Din validerings funktion bør så se sådan ud:
<script type="text/JavaScript"> function validering(f){ if( f.gruppe.value==''){ alert("Der skal vælges en gruppe!"); f.gruppe.focus(); return false; } if( f.kategori.value==''){ alert("Der skal vælges en kategori!"); f.kategori.focus(); return false; } if( f.produkt.value==''){ alert("Produkt skal udfyldes!"); f.produkt.focus(); return false; } if( f.pris.value==''){ alert("Pris skal udfyldes!"); f.pris.focus(); return false; } if( f.tlf1.value=='') if(f.email.value=='') { alert("Telefonnr. 1 eller e-mail skal udfyldes!"); f.tlf1.focus(); return false; } if( f.postNr.value==''){ alert("Postnr. skal udfyldes!"); f.postNr.focus(); return false; }
if(f.checkbox.checked==false){ alert("Jeg har læst og forstået vedtægter for annoncering, skal afkrydses!"); f.checkbox.focus(); return false; } f.mySubmit.disabled = true; return true; } </script>
Nu sender du en reference til formen med til funktionen: 'validering(this)'. I funktionen ligger denne reference i variablen 'f'.
Dernæst disabler vi kun knappen, hvis formen validerer.
Til sidst har jeg sat den obligatoriske type på dit script-tag ... language er deprecated (og har iøvrigt været det i mange år)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.