Avatar billede nc85 Nybegynder
04. februar 2008 - 09:29 Der er 12 kommentarer og
1 løsning

check på 2 checkboxes

Hejsa...

Jeg har 2 checkboxes, de har samme navn/id (Dette må helst ikke ændres) - de bliver genereret automatisk ud fra noget kode...

De ser sådan ud:

<input type="checkbox" name="Handbook" id="Handbook" onclick="change(this.checked);" value=""/>

----------------------------------------------------
Som i kan se i nedenstående, så hvis en af disse checkboxes er checked, bliver en anden inaktiv, problemet ligger i hvis man har checked begge 2 af, og man så unchecker den ene, så bliver "Signup" aktiv igen, hvilket den ikke må da den anden checkbox stadig er checked...

function change(checked){

    if (checked == true) {
        document.getElementById("Signup").checked = true;
        document.getElementById("Signup").disabled = true;
    } else {
        document.getElementById("Signup").checked = false;
        document.getElementById("Signup").disabled = false;
    }

}

-----------------------------------------------------------

Any solution til dette?
Avatar billede w13 Novice
04. februar 2008 - 10:22 #1
Har begge checkboxes samme id? Du kan ikke sætte 2 ens id'er på 2 elementer. Grundidéen i et id er jo netop, at det er unikt. Muligvis understøtter flere af de store browsere denne fejl, men det er desværre invalid kode. =)

Hvorfor bruger du i øvrigt ikke radiobuttons i stedet? Ville det ikke spare noget kode?
Avatar billede nc85 Nybegynder
04. februar 2008 - 10:34 #2
Nej, min fejl, checkboxene har ikke samme id - de hedder hhv Handbook1 & Handbook2
Avatar billede nc85 Nybegynder
04. februar 2008 - 11:04 #3
Prøver lige nu at gøre sådan, men det fungerer ikke helt...
Når det er sådan jeg checker handbook1, kan jeg ikke unchecke den igen????

function change(checked){

    if (checked == true) {
        document.getElementById("Signup").checked = true;
        document.getElementById("Signup").disabled = true;
    } else if(document.getElementById("Handbook2").checked = true){
            document.getElementById("Signup").checked = true;
            document.getElementById("Signup").disabled = true;
    } else if(document.getElementById("Handbook2").checked = true){
            document.getElementById("Signup").checked = true;
            document.getElementById("Signup").disabled = true;
    } else {
        document.getElementById("Signup").checked = false;
        document.getElementById("Signup").disabled = false;
    }

}
Avatar billede nc85 Nybegynder
04. februar 2008 - 11:05 #4
Hov, sådan her:
function change(checked){

    if (checked == true) {
        document.getElementById("Signup").checked = true;
        document.getElementById("Signup").disabled = true;
    } else if(document.getElementById("Handbook1").checked = true){
            document.getElementById("Signup").checked = true;
            document.getElementById("Signup").disabled = true;
    } else if(document.getElementById("Handbook2").checked = true){
            document.getElementById("Signup").checked = true;
            document.getElementById("Signup").disabled = true;
    } else {
        document.getElementById("Signup").checked = false;
        document.getElementById("Signup").disabled = false;
    }

}
Avatar billede w13 Novice
04. februar 2008 - 11:12 #5
Det ser ellers rigtigt ud. Det var også sådan, jeg ville gøre. Hvad er der galt med det lige nu?
Avatar billede nc85 Nybegynder
04. februar 2008 - 11:14 #6
Jamen at hvis jeg checker Handbook1 af, så kan jeg ikke unchecke den igen - Det virker fint ved Handbook2 checkboxen...
Avatar billede nc85 Nybegynder
04. februar 2008 - 11:27 #7
Og hvis jeg starter med at checke handbook2 til checked, og unchecker den, så bliver handbook1 checked??
Avatar billede nc85 Nybegynder
04. februar 2008 - 11:38 #8
Avatar billede w13 Novice
04. februar 2008 - 11:43 #9
Ah ja, det er selvfølgelig, fordi vi bruger = i dine if-sætninger og ikke == , så på den måde tildeler vi en værdi samtidig med at vi tjekker, om den er true. I virkeligheden kan du bare rette funktionen til:
-----------------------------------------------
function change(){
    if(document.getElementById("Handbook1").checked||document.getElementById("Handbook2").checked){
            document.getElementById("Signup").checked=true;
            document.getElementById("Signup").disabled=true;
    } else {
        document.getElementById("Signup").checked=false;
        document.getElementById("Signup").disabled=false;
    }

}
-----------------------------------------------
Og så behøver du heller ikke at overføre this.checked til funktionen, når du kalder den.
Avatar billede nc85 Nybegynder
04. februar 2008 - 11:51 #10
Ahhh, det sq da rigtigt - mange tak for det...
Avatar billede w13 Novice
04. februar 2008 - 12:02 #11
Så lidt, og tak for point! =)
Avatar billede w13 Novice
04. februar 2008 - 12:03 #12
Bemærk i øvrigt, at ==true er standard, så vi behøver ikke skrive det. Ligeledes kan vi teste, om det er false, ved bare at skrive det med et udråbstegn foran:
if(!document.getElementById("Handbook1").checked)
Avatar billede nc85 Nybegynder
04. februar 2008 - 12:11 #13
Cool, det må jeg lige notere mig... endnu engang, tak for hjælpen
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