Avatar billede JJ77 Juniormester
19. januar 2006 - 23:41 Der 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:(
Avatar billede jaw Nybegynder
19. januar 2006 - 23:45 #1
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 :)
Avatar billede JJ77 Juniormester
19. januar 2006 - 23:56 #2
Man kan ikke få submitknappen til at blive mat mens den loader, eller sætte en timer til, så den ikke kan submitte mere end 1 gang pr minut?
Avatar billede rednex Nybegynder
20. januar 2006 - 01:07 #3
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.
Avatar billede olebole Juniormester
20. januar 2006 - 01:29 #4
<ole>

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>

/mvh
</bole>
Avatar billede olebole Juniormester
20. januar 2006 - 01:35 #5
- og du kan:

<form onsubmit="this.mySubmit.disabled=true">
...
    <button name="mySubmit" type="submit">Send</button>
</form>

- 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)
Avatar billede JJ77 Juniormester
20. januar 2006 - 11:25 #6
jeg har nu en form som ser således ud:

<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="post" name="form" onsubmit="this.mySubmit.disabled=true","return validering();>

og en submit:

<input type="submit" name="mySubmit" value="Opret salgsannonce">


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();>
Avatar billede coderdk Praktikant
20. januar 2006 - 11:35 #7
onsubmit="this.mySubmit.disabled=true;return validering()">
Avatar billede JJ77 Juniormester
20. januar 2006 - 11:43 #8
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
Avatar billede JJ77 Juniormester
20. januar 2006 - 11:48 #9
kan man sætte dette ind i javascripten som validere felterne.. jeg har prøvet sådan her.. er det ok?

  if( form.gruppe.value==''){
      alert("Der skal vælges en gruppe!");
      form.gruppe.focus();
      this.mySubmit.disabled=false;
      return false;
Avatar billede JJ77 Juniormester
20. januar 2006 - 11:51 #10
men så kan det ikke huske hvad der stod i felterne.. lidt øv.. det går jo ikke:(
Avatar billede rednex Nybegynder
20. januar 2006 - 11:53 #11
Det skulle man nok kunne. Jeg tror dog at den skal hedde
form.mySubmit.disabled = false;
Avatar billede JJ77 Juniormester
20. januar 2006 - 12:32 #12
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;
  }

  return true; 
}
</script>

      form.kategori.focus();   
      form.mySubmit.disabled = false;
      return false;
  }
Avatar billede JJ77 Juniormester
20. januar 2006 - 12:33 #13
hov.. det som står under </script> skal i ikke tage jer af:)
Avatar billede JJ77 Juniormester
20. januar 2006 - 12:35 #14
tak ska i ha.. smider i ikke lige et svar, så må 2-3 stk jo nok dele pointene:)
Avatar billede rednex Nybegynder
20. januar 2006 - 12:51 #15
Jeg undrer mig lidt over dette:
<snip>
  if( form.tlf1.value=='')
  if(form.email.value=='')
</snip>

Men ellers ser det meget rigtigt ud. Jeg lader de andre slås om point :o)
Avatar billede coderdk Praktikant
20. januar 2006 - 12:51 #16
Ingen til mig, tak :)
Avatar billede JJ77 Juniormester
20. januar 2006 - 12:53 #17
Det er fordi at ét af disse felter SKAL udfyldes.. og det er ligemeget hvilket;) Er det så ikke ok?
Avatar billede rednex Nybegynder
20. januar 2006 - 13:05 #18
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 == '')
{
...
}
Avatar billede JJ77 Juniormester
20. januar 2006 - 13:38 #19
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>
Avatar billede rednex Nybegynder
20. januar 2006 - 13:59 #20
Tjo, det skulle man også nok kunne. Noget i denne stil virker måske:

if (form.inputfile.value.lastIndexOf('.jpg') == form.inputfile.value.length - 4) {
    alert('Fil er jpg');
}
Avatar billede JJ77 Juniormester
20. januar 2006 - 14:24 #21
hmmm.. det virker ikke :(
Avatar billede JJ77 Juniormester
20. januar 2006 - 14:25 #22
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.."
Avatar billede rednex Nybegynder
20. januar 2006 - 14:39 #23
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.
Avatar billede JJ77 Juniormester
20. januar 2006 - 14:41 #24
..ok... men hvad skal jeg gøre?
Avatar billede rednex Nybegynder
20. januar 2006 - 14:47 #25
Hmm, oprette spm i Javascript tror jeg :o)
Avatar billede JJ77 Juniormester
20. januar 2006 - 15:01 #26
ok.. men kan jeg så ikke bruge det du skrev
if (form.inputfile.value.lastIndexOf('.jpg') == form.inputfile.value.length - 4) {
    alert('Fil er jpg');
}

sorry hvis det er et dumt spørgsmål:)
Avatar billede JJ77 Juniormester
20. januar 2006 - 15:01 #27
og smider i ikke lige nogle svar.. takker
Avatar billede rednex Nybegynder
20. januar 2006 - 15:05 #28
Det kan ikke bruges præcis som det står der, men med lidt tilpasning kan idéen godt genbruges.
Avatar billede olebole Juniormester
20. januar 2006 - 16:03 #29
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>
Avatar billede olebole Juniormester
20. januar 2006 - 16:07 #30
Læg mærke til følgende:

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)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester