Avatar billede mtrolle Nybegynder
18. november 2005 - 11:36 Der er 22 kommentarer og
2 løsninger

checkbox gør submit klikbar

Hej.

Jeg har en side, hvor man skal acceptere nogle vilkår for at kunne submitte.
Jeg har derfor en checkbox og når denne er checked, skal min submitknap være klikbar, men når den ikke er checked, skal min submitknap ikke være klikbar.

Skal jeg ikke have fat i noget ala
document.getElementById('submitknapid').disabled = (document.getElementById('checkboxid').checked)? true : false;
?

//mtrolle
Avatar billede cayman Nybegynder
18. november 2005 - 11:40 #1
jo :o)
Du skal bare bruge == istedet for =
Avatar billede cayman Nybegynder
18. november 2005 - 11:41 #2
Og så er der også noget med paranterserne der ikke helt holder
..
Avatar billede fennec Nybegynder
18. november 2005 - 11:41 #3
Det virker fint, men du har måske glemt at tilføje id på formfelterne.
Den kode virker hos mig:

<input id="ch" type="Checkbox" name="test1" value="OK" onclick="subButon()">
<input id="su" type="Submit" value="Klik">
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function subButon()
{
  document.getElementById('su').disabled = (document.getElementById('ch').checked)? true : false;
}
//-->
</SCRIPT>
Avatar billede softspot Forsker
18. november 2005 - 11:43 #4
Prøv med dette:

<form>
<input type="checkbox" onclick="this.form.submitknap.disbled = !this.checked"><br>
<input type="submit" name="submitknap" value="send">
</form>
Avatar billede softspot Forsker
18. november 2005 - 11:45 #5
...og det er naturligvis disabled og ikke disbled :)
Avatar billede fennec Nybegynder
18. november 2005 - 11:47 #6
softspot >>
Meget bedre kode du har der... Hvorfor så jeg ikke det?? :o)
Avatar billede softspot Forsker
18. november 2005 - 11:50 #7
Men som fennec er inde på, så er det klart bedre at lægge denne tilstandshåndtering i en funktion, for lige om lidt kommer du sikkert med et krav om at der er 30 andre checkbokse som også får indflydelse på om submit skal være enabled eller disabled ;-)


<script type="text/javascript">
function setState(frm)
{
  if(frm) {
    frm.submitknap.disbled = !frm.check1.checked;
  }
}
</script>

<form>
<input type="checkbox" name="check1" onclick="setState(this.form)"><br>
<input type="submit" name="submitknap" value="send">
</form>
Avatar billede softspot Forsker
18. november 2005 - 11:53 #8
Hov! Jeg nåede ikke lige at se din kommentar fennec, men tak :).

Men som jeg påpeger kan jeg bedre lide din måde at tænke på hvad angår "scalability", for den "dovne" måde medfører bare mere arbejde når siden vokser, så man kan lige så godt vænne sig til at lave den "fornuftige" struktur i sin kode.
Avatar billede softspot Forsker
18. november 2005 - 11:57 #9
...og så lykkedes det mig at copy/paste selv samme fejl som jeg lavede i mit første post (disbled => disabled) :)
Avatar billede mtrolle Nybegynder
18. november 2005 - 12:06 #10
Dvs at
onclick="document.getElementById('thisSubmit').disbled = (this.checked)? true : false;"
kan jeg blot sætte ind i min <input type="checkbox"...> kode?
Jeg har på ingen måde brug for at udvide :)
Jeg har ikke prøvet den kode jeg skrev, det var blot et gæt og er forbløffet over jeg ikke bare kastede mig ud i det og prøvede :)

Men i alt fald, virker denne onclick kode ikke i safari/firefox og endda heller ikke i IE.
Avatar billede softspot Forsker
18. november 2005 - 12:08 #11
Hvis du ikke har brug for at udvide, så gør sådan her:

<form>
<input type="checkbox" onclick="this.form.submitknap.disabled = !this.checked"><br>
<input type="submit" name="submitknap" value="send">
</form>
Avatar billede cayman Nybegynder
18. november 2005 - 12:16 #12
softspot: this.form.submitknap er javascript der kun virker i IE. Man bør anvende getElementById som mtrolle som udgangspunkt også har gjort.

onclick="document.getElementById('thisSubmit').disabled = (this.checked)

Vil virke fint
Avatar billede softspot Forsker
18. november 2005 - 12:31 #13
Helt ærlig - det er noget sludder!

Jeg har lige testet den kode i min sidste kommentar i IE 6.0, FF 1.0, Opera 6.05, NS 7.2 og Mozilla 1.4... og gæt hvad: det fungerer i dem allesammen. Der kan være tale om at initialværdien på checkboksen (eller submitknappen alt efter hvordan man anskuer det) ikke er sat i overensstemmelse med submitknappens tilstand, men det kan da klares rimelig let:

<form>
  <input type="checkbox" onclick="this.form.submitknap.disabled = !this.checked"><br>
  <input type="submit" name="submitknap" value="send" disabled>
</form>
Avatar billede mtrolle Nybegynder
18. november 2005 - 13:00 #14
Okay :)

Jeg foretrækker til hver en tid document.getElementById. Men det synes jeg er en helt anden diskution, som sikkert også er spændende nok :D

softspot smid et svar.
cayman smid et svar.

Det bliver cayman's sidste løsning kompineret med et udråbstegn fra softspots eksempel.

Tak for Jeres hjælp.
Avatar billede cayman Nybegynder
18. november 2005 - 13:02 #15
Softspot:
Du har nok ret. Det er nok bare mig der er gammeldags. Men den måde at refere variable var en Microfsoft opfandt, og jeg tror ikke den er en del af ECMA262 standarden. At det så tilsyneladende virker er jo bare fint.

Jeg har bare haft andre erfaringer, men der var også tale om document.form og ikke this.form.
Avatar billede cayman Nybegynder
18. november 2005 - 13:02 #16
ok
Avatar billede softspot Forsker
18. november 2005 - 13:08 #17
Så får du et svar herfra :)
Avatar billede softspot Forsker
18. november 2005 - 13:14 #18
Takker for point :)
Avatar billede softspot Forsker
18. november 2005 - 13:19 #19
Bare for en god orden skyld: Det er muligt at this.form for et input-element ikke er en del af ECMA262-standarden, men den er den del af W3C DOM, så den burde være god nok (hvis ellers den pågældende browser implementerer denne standard :))...
Avatar billede olebole Juniormester
18. november 2005 - 17:35 #20
<ole>

cayman >> Dine indlæg tyder faktisk på, du aldrig har læst ECMA262 ... i hvert fald har du ikke forstået det første af den  :)

ECMA262 omhandler - og definerer regler for - scriptsprog ... herunder JavaScript.

'document.getElementById' har derimod intet somhelst med ECMA262 at gøre, men er fastlagt af W3C i deres DOM-rekommandationer. Den er det, der kaldes en ECMA-DOM binding.

'this.form.FELTNAVN' er ikke en MS-opfindelse, men blev ligesom 'document.FORMNAVN.FELTNAVN' introduceret af Netscape - som i øvrigt også skabte og introducerede JavaScript (oprindelig 'LiveScript').

/mvh
</bole>
Avatar billede olebole Juniormester
18. november 2005 - 17:38 #21
PS: Har du andre erfaringer - som du skriver i (18/11-2005 13:02:32) - må det skyldes andre fejl i den kode, dine erfaringer udspringer fra.

Man skal altid være forsigtig med at generalisere udfra egne erfaringer, da disse kan skyldes mange forskellige ting ... specielt, når man ikke er synderlig stiv i standarderne  ;o)
Avatar billede cayman Nybegynder
18. november 2005 - 23:54 #22
Hej Ole bole

Uanset motivationen med dit indlæg, har jeg ikke andet at sige end at det ikke gjorde andet end at træde på folk.

Ingen benefit for softspot, mtrolle eller nogen andre.

Det var ærgerligt jeg blandede mig i debatten og fik hidset så mange mennesker op. Det sker ikke igen. Der skal hermed lyde en officiel undskyldning alle der føler sig trådt på ;o)

Jeg videregiver kun hvad jeg har lært. Min primære fokus er dog J2EE, så det kan godt være der er noget der er script-viden der er misforstået.

Men ikke desto mindre hjalp det mtrolle. Det var da i det mindste mere end du formåede. Olebole.
Avatar billede olebole Juniormester
19. november 2005 - 00:24 #23
Meningen var ikke, at min kommentar direkte skulle hjælpe mtrolle eller softspot - og heller ikke, at du skulle føle dig trådt på.

Hensigten var dels at få rettet dine forkerte informationer og dels at få dig til at dæmpe din udtalte skråsikkerhed i fremtiden - specielt når/hvis du ikke har så meget at have den i.
Prøv at læse dine kommentarer i denne tråd én gang til. Så vil du forhåbentlig indrømme, at de udstråler, der skulle være tale om 'kold viden' - hvilket er yderst uhensigtsmæssigt i et hjælpeforum, når det modsatte faktisk er tilfældet.
Du kan også prøve at kikke på andre tråde, hvor du de seneste dage har givet fejlagtige informationer ... igen med stor 'sikkerhed'.

Det er min helt klare overbevisning, at det bl.a. vil kunne hjælpe mtrolle og softspot i fremtiden, hvis mit lille 'projekt' kunne lykkes - omend indirekte  :)
Avatar billede roenving Novice
21. november 2005 - 18:27 #24
>>cayman

1. Dit indlæg 18/11-2005 11:40:27 er direkte fejlagtigt ...

-- da det er en værdi-tildeling skal der aldeles ikke bruges en sammenligningsoperator ...

2. Dit indlæg 18/11-2005 11:41:19 er også forkert, men er, da man ikke behøver de ydre paranteser i den ternære operator, måske undskyldeligt ...

-- men min umiddelbare fortolkning vil være, at du ikke tror, at paranteser (ligesom f.eks. i matematiske udtryk !-) kan nestes, hvilket de principielt kan i en uendelighed (nå, ja, afhængig af den regnekraft og hukommelse, der stilles til rådighed for javascript-fortolkeren og javascript-versionen !-), altså er det også direkte en fejl ...

3. Dit indlæg 18/11-2005 12:16:46 er, som olebole påpeger bare en fejlinformation, altså direkte forkert ...

4. Dit indlæg 18/11-2005 13:02:32 antyder også, at du ikke har kigget på DOM-bindings, da _alle_ form-elementer har en property, som direkte henviser til den omkransende form (hvis der er en !-), så måske skulle du kigge på: http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/ecma-script-language-binding.html, hvorimod der ikke findes noget, som hedder document.form, så der har du selvfølgelig haft visse problemer !o]

-- så alt-i-alt mener jeg præcis, at du bør være olebole taknemmelig for, at han gider at ofre tid og kræfter på at forklare dig nogle ting, som du helt åbenlyst overhovedet ikke ved eller har forstået ...
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