Avatar billede htx98i17 Professor
19. oktober 2012 - 13:48 Der er 9 kommentarer og
1 løsning

check all i bestemt form

Jeg har følgende funktion som jeg ikke kan få til at fungere, fordi jeg gerne vil have den til at check all i en bestemt form (formnavn).

function CheckAll(formnavn) {
           
        for(i=0;i<document.formnavn.elements.length;i++) {
            e = document.formnavn.elements[i];
            e.checked = 'true';
        }
    }

Kan nogen fortælle mig hvad der skal laves om?
Avatar billede olebole Juniormester
19. oktober 2012 - 14:16 #1
<ole>

1) Kan du fortælle os hvilke JavaScript fejl, din kode udløser?

2) Kan du fortælle os, hvorfor du ikke slår JS-fejlmeddelelser til, når du skriver JS-kode?

/mvh
</bole>
Avatar billede olsensweb.dk Ekspert
19. oktober 2012 - 14:19 #2
prøv denne, formnavn skal i []
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    function CheckAll(formnavn) {         
        for(j=0, lng = document[formnavn].elements.length;j<lng;j++) {
            e = document[formnavn].elements[j];
            e.checked = true;
        }
    }
    function UnCheckAll(formnavn) {         
        for(j=0, lng = document[formnavn].elements.length;j<lng;j++) {
            e = document[formnavn].elements[j];
            e.checked = false;
        }
    }
    </script>
</head>
<body>
<form name="testform" action ="#" method="post">
<input type="checkbox" name="cb[]">
<input type="checkbox" name="cb[]">
<input type="checkbox" name="cb[]">
<input type="checkbox" name="cb[]">
<input type="checkbox" name="cb[]">
<input type="button" name="send" value="check all" onclick="CheckAll(this.form.name)">
<input type="button" name="send" value="Uncheck all" onclick="UnCheckAll('testform')">
<form>
</body>
</html>
 
 
hvis det ikke virker må du vise os den html du tester mod
Avatar billede htx98i17 Professor
19. oktober 2012 - 14:28 #3
tak ronols - Det er skønt, at du har evnen til at komme med et korrekt svar, uden at problematisere alt muligt andet.

lig et svar
Avatar billede olebole Juniormester
19. oktober 2012 - 14:42 #4
Der er kun én, som skaber problemer. Det er klart, at man ikke kan kode med bind for øjnene - og hvis du ikke slår fejlmeddelelser til, koder du i blinde  *o)

Personligt problematiserede jeg ikke 'alt muligt andet'. Jeg fortalte dig blot, hvori din fejl bestod  =)

Derudover giver koden ikke særlig god mening. Hvis du på et tidspunkt skulle finde på at bruge radio-elementer, vil scriptet give 'sære' resultater. Endelig giver det vel heller ikke mening at sætte en ikke-eksisterende checked property på type="text", TEXTAREA eller SELECT.

Derfor bør du diskriminere med:

if (e.getAttribute("type")==="checkbox") e.checked = true;
Avatar billede olsensweb.dk Ekspert
19. oktober 2012 - 14:59 #5
det var som udemærket spørgsmål Ole stillede, hvis man kørte dit script melder Firebug (addon til FireFox) ukendt formnavn
Ole ville bare lave hjælp til selvhjælp istedet for at give dig svaret.
man bør ikke udvikle uden at anvende de udviklings værtøjer der er i ens browser

der mangler vist også en var foran variabel navne, da variablen ellers vil leve uden for functionen :( JS særhed
function CheckAll(formnavn) {           
    for(var j=0, var lng=document[formnavn].elements.length;j<lng;j++) {
        var e = document[formnavn].elements[j];
        e.checked = true;
    }
}
Avatar billede olebole Juniormester
19. oktober 2012 - 15:06 #6
Njarrr ... næsten. Da de to variabler er kommaspareret, skal der kun være ét var:

for(var j=0, lng=document[formnavn].elements.length;j<lng;j++) {
Avatar billede olsensweb.dk Ekspert
19. oktober 2012 - 15:15 #7
#6
ups det var da en tanketorsk jeg laved det, selvføgelig kun et var, som du skriver.
Avatar billede olebole Juniormester
19. oktober 2012 - 16:11 #8
Der er nok stadig et par ting, jeg personligt ville gøre anderledes. For det første er name attributten ikke nødvendigvis unik, hvorfor der kan være flere FORM's med samme name. Faktisk kan man helt undgå funktionernes opslag, der finder formen  =)

Desuden gælder det principielt for løkker, at man bør begrænse arbejdet så meget som muligt indenfor løkken. F.eks. bør array-opslag være så simple som muligt, hvorfor jeg ville lægge en reference til formens elements collection udenfor løkken:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
</style>
<script type="text/javascript">
function CheckAll(elmForm) {
    var e, aElms = elmForm.elements;
    for (var j=0,lng=aElms.length; j<lng; j++) {
        e = elmForm[j];
        if (e.getAttribute("type")==="checkbox") e.checked = true;
    }
}
function UnCheckAll(elmForm) {
    var e, aElms = elmForm.elements;
    for (var j=0,lng=aElms.length; j<lng; j++) {
        e = aElms.elements[j];
        if (e.getAttribute("type")==="checkbox") e.checked = false;
    }
}
</script>
</head>
<body>
<form action="#" method="post">
    <input type="checkbox" name="cb[]">
    <input type="checkbox" name="cb[]">
    <input type="checkbox" name="cb[]">
    <input type="checkbox" name="cb[]">
    <input type="checkbox" name="cb[]">
    <input type="button" name="send" value="check all" onclick="CheckAll(this.form)">
    <input type="button" name="send" value="Uncheck all" onclick="UnCheckAll(this.form)">
<form>
</body>
</html>
Avatar billede olebole Juniormester
19. oktober 2012 - 16:13 #9
*LoL* Flot, Ole!  :D

function CheckAll(elmForm) {
    var e, aElms = elmForm.elements;
    for (var j=0,lng=aElms.length; j<lng; j++) {
        e = aElms[j];
        if (e.getAttribute("type")==="checkbox") e.checked = true;
    }
}
function UnCheckAll(elmForm) {
    var e, aElms = elmForm.elements;
    for (var j=0,lng=aElms.length; j<lng; j++) {
        e = aElms[j];
        if (e.getAttribute("type")==="checkbox") e.checked = false;
    }
}
Avatar billede olebole Juniormester
19. oktober 2012 - 16:18 #10
- og det kan såmænd også gøres med en enkelt funktion, der tager et ekstra argument:

<script type="text/javascript">
function CheckAll(elmForm, bChecked) {
    var e, aElms = elmForm.elements;
    for (var j=0,lng=aElms.length; j<lng; j++) {
        e = aElms[j];
        if (e.getAttribute("type")==="checkbox") e.checked = bChecked;
    }
}
</script>

    <input type="button" name="send" value="check all" onclick="CheckAll(this.form, true)">
    <input type="button" name="send" value="Uncheck all" onclick="CheckAll(this.form, false)">
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