Avatar billede googolplex Novice
29. februar 2004 - 08:12 Der er 21 kommentarer og
1 løsning

Disable submit-knappen i forbindelse med validering

Jeg har en formular, hvor jeg har noget JavaScript validering der fungerer fint. Nu vil jeg gerne have det således, at min submit-kanp ('send') er disabled="didabled" fra starten af og kun bliver aktiveret i det øjeblik begge felter ('name' og 'postnummer') valideres korrekt (afhakket med grønt).

Jeg har forsøgt mig med et system roenving har udviklet, men jeg kan ikke få det til at fungere:

http://googolplex.dk/formtest2.php
Avatar billede htm Nybegynder
29. februar 2004 - 10:28 #1
Du skal have en onsubmitevent på formen, eks. onsubmit="return checkthis(this);"

dit script skal så være noget ala:

function checkthis(f)
{
  f.send.disabled=true;
 
  //Tjek alle dine felter her
  if ( alt OK ) return true;
  else return false;
}

håber du kan se princippet. Jeg har ikke rigtigt kigget så meget på din oprindelige kode, men kan se at du validerer det så snart at felter er skrevet. Der skal i hvert fald også tjekkes når onsubmit.
Avatar billede googolplex Novice
29. februar 2004 - 11:02 #2
Nej, jeg tror ikke onsubmit virker i dette tilfælde. Så tjekkes der jo først når der trykkes på submit og fidusen er jo, at man slet ikke skal kunne trykke på submit-knappen så længe felterne ikke er valideret.
Avatar billede htm Nybegynder
29. februar 2004 - 11:13 #3
ok jeg kan godt se hvad du mener nu. Det første er selvfølgelig at sætte send knappen til disabled inden formen begynder at blive brugt, ellers kan man submitte uden at have udfyldt noget.

det gøres med at sætte dette i bunden af dit dokument

<script type="text/javascript">
document.forms[0].elements['send'].disabled = true;
</script>

Men så er det noget med javascript array, og syntes det er blandet lidt sammem, så er tror jeg må stå fra...
Avatar billede htm Nybegynder
29. februar 2004 - 11:27 #4
Har du evt. et link til den kode som Roenving har lavet, som du gik ud fra ?
Avatar billede roenving Novice
29. februar 2004 - 12:48 #5
<br /><input type="submit" name="send" value="Send til mig" disabled="disabled" />
Avatar billede htm Nybegynder
29. februar 2004 - 12:58 #6
roenving>> Får mig at se virker det ikke med det array - det ser ud til at først sætter man fields[0] = "postnummer" så sætter man fields[0] = false

Hvis man prøver og lave
alert(fields[0]); før og efter for-løkken vil den først være postnummer så false.

alert(fields['postnummer']); er bare undefined.

Er jeg helt galt på den eller? Jeg har i hvert fald lige kigget på scriptet, men kunne ikke få ok = true - selv om begge billeder indikerede rigtigt indtastet. :-)
Avatar billede roenving Novice
29. februar 2004 - 13:43 #7
Jeg sad også og gloede på koden, som jeg ikke kunne gennemskue ...

Men E* åd lige mit indlæg, så lige på:

Det skulle gøres noget anderledes (og jeg fjernede også lige et par fejlplacerede \47'ere !-)

<script type="text/javascript">
<!--

var fields = {'postnummer':false,'fornavn':false};

function jjrCheckSubmit(field)
{
    var ok = true;

    for(i in fields)
    {
        ok = ok && fields[i];
    }

    field.form.send.disabled = !ok;
}

function jjrValidate(field, regex, id, errortext)
{//alert(id)
    if (field.value.match(regex))
    {
        document.getElementById(id).src="/ok.gif";
        document.getElementById(id).title="Feltet er korrekt udfyldt!";
        fields[field.name] = true;
    }
    else
    {
        document.getElementById(id).src="/no.gif";
        document.getElementById(id).title=errortext;
        fields[field.name] = false;
    }

    jjrCheckSubmit(field);
}

//-->
</script>

<form action/formtest2.php method="get" enctype="application/x-www-form-urlencoded" >
<input type="hidden" name="jjrsubmitcheck" value="issubmittet" />
<input type="text" name="fornavn" value="Dit fornavn" maxlength="50" onfocus="jjrValidate(this, /^[a-zA-Z]{2,50}$/, 'iconid1', 'Feltet \47fornavn\47 er ikke udfyldt korrekt!')" onkeyup="jjrValidate(this, /^[a-zA-Z]{2,50}$/, 'iconid1', 'Feltet \47fornavn\47 er ikke udfyldt korrekt!')" /><img src="/no.gif" title="Feltet 'fornavn' er ikke udfyldt korrekt!" id="iconid1" />
<br /><input type="text" name="postnummer" value="Dit postnummer" maxlength="4" onfocus="jjrValidate(this, /^[1-9]\d{3}$/, 'iconid3', 'Feltet \47postnummer\47 er ikke udfyldt korrekt!')" onkeyup="jjrValidate(this, /^[1-9]\d{3}$/, 'iconid3', 'Feltet \47postnummer\47 er ikke udfyldt korrekt!')" /><img src="/no.gif" title="Feltet 'postnummer' er ikke udfyldt korrekt!" id="iconid3" />
<br /><input type="submit" name="send" value="Send til mig" disabled="disabled" />
</form>
Avatar billede htm Nybegynder
29. februar 2004 - 13:52 #8
Ja se det var meget bedre :-) Meget rart lige at få slået fast hvordan arrays virker i Javascript.
Avatar billede roenving Novice
29. februar 2004 - 13:55 #9
-- og man skulle jo over i et objekt for at få det til at virke, men det gør det så også !-)
Avatar billede googolplex Novice
29. februar 2004 - 14:17 #10
Undskyld forsinkelsen, blev lige sat til at gøre hovedrent af min bedre halvdel :P

Jeg prøvet det lige af og vender tilbage :)
Avatar billede googolplex Novice
29. februar 2004 - 15:06 #11
Så er det rette, men der er en lille fejl jeg ikke kan finde:

http://googolplex.dk/formtest2.php
Avatar billede htm Nybegynder
29. februar 2004 - 15:16 #12
Ret simpelt :-)

Du bruger:
var fields = {'postnummer':false;'fornavn':false};
det skal være:
var fields = {'postnummer':false,'fornavn':false};

altså komma der adskiller dem og ikke semikolon.

Derudover har du en enkelt fejl ved din form
<form action"/formtest2.php" method="get" enctype="application/x-www-form-urlencoded"  >
skal være
<form action="/formtest2.php" method="get" enctype="application/x-www-form-urlencoded"  >
Avatar billede googolplex Novice
29. februar 2004 - 15:22 #13
Jamen, så tror jeg der er bingo!!

Hvis I begge smider et svar, så deler jeg pointene mellem jer :)
Avatar billede htm Nybegynder
29. februar 2004 - 15:23 #14
Det må helt være forbeholdt roenving :-)
Avatar billede googolplex Novice
29. februar 2004 - 15:26 #15
Hov, en lille ting:

Når jeg trykker Send, så forsvinder knappen igen og kommer først tilbage når begge felter igen har fået fokus!

Kan det løses vis JavaScript eller skal det løses serverside ?
Avatar billede roenving Novice
29. februar 2004 - 15:29 #16
Disablingen af knappen bliver jo aktiveret ved afsendelse, så der må noget onload til, enten til at disable, når de ikke er udfyldt, eller til at enable, når de er udfyldt, men det klarer du nemmest i dit php-script, for så sætter du bare disabled ind i submit-knappen efter behov !-)
Avatar billede googolplex Novice
29. februar 2004 - 15:31 #17
Ok, det tænkte jeg nok, sådan fungere resten også :)

Kræver bare lidt programmering, så ville lige sikre mig at der ikke var en lynhurtig måde!!

Svar roenving :)
Avatar billede roenving Novice
29. februar 2004 - 15:35 #18
Velbekomme '-)
Avatar billede googolplex Novice
29. februar 2004 - 15:37 #19
Ok, men nu er der opstået et nyt problem efter jeg har ordnet det på serveren:

Når jeg trykker 'Send', så er knappen godt nok sat rigtigt, men FØRSTE gang et felt får focus så forsvinder den...

Kan det løses ?
Avatar billede roenving Novice
29. februar 2004 - 15:43 #20
Så skal denne linje konsekvens-rettes (til true, hvis der ikke er disabling på !-)

var fields = {'postnummer':false,'fornavn':false};
Avatar billede googolplex Novice
29. februar 2004 - 18:02 #21
Så funker det :)

Takker for hjælpen begge!!
Avatar billede roenving Novice
29. februar 2004 - 18:39 #22
-- og tak for points ;~}
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