Avatar billede SilenceWar Nybegynder
02. november 2010 - 15:06 Der er 7 kommentarer og
1 løsning

Javascript - Videreudvikling af Checkboks script

Hej eksperter!

Jeg fik denne kode af Intenz for nylig:

<script>
function disableCheckboxes() {
    // loop alle argumenter igennem
    for(var i=0; i<arguments.length; i++) {
        // hent næste checkbox via dens ID
        var e = document.getElementById(arguments[i]);
        // skal den være disabled eller enabled? Vi gør det modsatte af hvad den er nu
        disabled = (e.disabled) ? false : true;
        // ændre dens status
        e.disabled = disabled;
    }
}
</script>

Den gør, at jeg ved hjælp af nogle ID'er, kan disable og enable forskellige checkbokse ved en OnClick funktion.

Jeg har dog brug for, at videreudvikle denne kode en smule.

Forestil jer dette:

<input type="checkbox" id="kejser" onclick="disableCheckboxes('centurion', 'diplomat');" /> 


<input type="checkbox" id="centurion" onclick="disableCheckboxes('diplomat');" />


<input type="checkbox" id="diplomat" />

- Som det ser ud lige nu, vil et klik på kejser disable/enable centurion og diplomat men..
Jeg har faktisk brug for, at når man checker kejser-boksen så skal de både centurion og diplomat blive disabled.
Men når man fjerner fluebenet i kejser-boksen er det kun Centurion der skal enables..

Håber I forstår?

Det er faktisk den eneste ændring jeg mangler..

Hilsen
SilenceWar
Avatar billede intenz Novice
02. november 2010 - 15:23 #1
Her er en lidt mere fleksibel udgave:
<script>
function disableCheckboxes(e, disable, enable) {
   
    if (e.checked == true) { // hvis elementet er checked, skal vi disable
       
        // loop alle disable argumenter igennem
        for(var i=0; i<disable.length; i++) {
            // hent næste checkbox via dens ID
                var e = document.getElementById(disable[i]);

                // ændre dens status
                e.disabled = true;
        }

    } else { // ellers skal vi enable
       
        // loop alle enable argumenter igennem
        for(var i=0; i<enable.length; i++) {
            // hent næste checkbox via dens ID
                var e = document.getElementById(enable[i]);

                // ændre dens status
                e.disabled = false;
        }

    }
}
</script>
<input type="checkbox" id="kejser" onclick="disableCheckboxes(this, ['centurion', 'diplomat'], ['centurion']);" /> 


<input type="checkbox" id="centurion" onclick="disableCheckboxes(this, ['diplomat'], ['diplomat']);" />


<input type="checkbox" id="diplomat" />


Du skal nu bruge 3 argumenter til at kalde den:
1. this (skal altid være der)
2. Array med ID'er på de felter der skal disables når man klikker
3. Array med de ID'er der skal enables når man klikker igen

Løser det dit problem?
Avatar billede SilenceWar Nybegynder
02. november 2010 - 15:23 #2
Faktisk, imens jeg lige sad og lavede noget - kom jeg på, at der da også skal være en sådan variable der siger:

Hvis centurion allerede er markeret - og kejser ikke er.
Så hvis kejser-boksen bliver checked, er det kun centurion der skal lukkes..

(for hvis centurion er markeret fra starten af, er diplomat også.. Ellers vil det gøre sådan, at ved markering af kejser-boksen vil centurion blive låst og diplomat låst op)
Avatar billede SilenceWar Nybegynder
02. november 2010 - 15:24 #3
Skal lige teste den :)
Avatar billede intenz Novice
02. november 2010 - 15:26 #4
Og den lidt kønnere version af scriptet (gør det samme):
function disableCheckboxes(e, disable, enable) {

    var act = e.checked; // skal vi enable eller disable (ud fra om feltet er checked eller ej)
    var loopArray = (act == true) ? disable : enable;
       

    // loop alle disable argumenter igennem
    for(var i=0; i<loopArray.length; i++) {
        // hent næste checkbox via dens ID
            var e = document.getElementById(loopArray[i]);

              // ændre dens status
            e.disabled = act;
    }
}
Avatar billede SilenceWar Nybegynder
02. november 2010 - 15:33 #5
Det virker faktisk efter hensigten! og løser mange dele af mit problem :)

Er det muligt, at man kan få samme kode til, at sætte flueben i alle bokse den låser? Kun dem den låser?
Avatar billede intenz Novice
02. november 2010 - 15:36 #6
Ja, mon ikke. Prøv at brug det her script i stedet:
function disableCheckboxes(e, disable, enable) {

    var act = e.checked; // skal vi enable eller disable (ud fra om feltet er checked eller ej)
    var loopArray = (act == true) ? disable : enable;

    // loop alle argumenter igennem, enten fra disable eller enable
    for(var i=0; i<loopArray.length; i++) {
        // hent næste checkbox via dens ID
        var e = document.getElementById(loopArray[i]);
       
        if (act) {
            e.checked = true;
        }

        // ændre dens status
        e.disabled = act;
    }
}
Avatar billede SilenceWar Nybegynder
02. november 2010 - 15:42 #7
Du fortjener så meget de her point! Værsgo, og mange tak for hjælpen! :)
Avatar billede intenz Novice
02. november 2010 - 15:44 #8
Tak, og velbekomme :)
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