Avatar billede shjorth Nybegynder
17. januar 2010 - 17:27 Der er 16 kommentarer og
1 løsning

Send checkbox'es videre med JS

Hejsa.

Jeg har nogle checkboxe der ser således ud:

<input type='checkbox' value='1' name='flibox[]' id='flibox'>
<input type='checkbox' value='3' name='flibox[]' id='flibox'>
<input type='checkbox' value='2' name='flibox[]' id='flibox'>

På submit knappen er der så et onclick event:

document.getElementById("flibox").getValue()

Problemet er at den retunerer checkbox nr 1's value - altså 1.

Den skal altså med andre ord kun returnere de selectede, og deres value.

Mange tak
Avatar billede intenz Novice
17. januar 2010 - 18:36 #1
Det er fordi du bruger ID til at finde elementet. Det returnerer kun ét resultat, da elementers ID skal være unikke. Du skal hente med name i stedet og så loope elementerne igennem.

Her er et eksempel:
<script>
function checkbox_values() {
    resultat = '';
    checkboxe = document.getElementsByName('flibox[]');
    for (var i = 0; i < checkboxe.length; i++ ) {
        if (checkboxe[i].checked == true) {
            if (resultat == '') resultat = checkboxe[i].value;   
            else resultat += ','+checkboxe[i].value;
        }
    }
    document.getElementById('flibox_values').value = resultat;
}
</script>

<input type='checkbox' value='1' name='flibox[]'>
<input type='checkbox' value='2' name='flibox[]'>
<input type='checkbox' value='3' name='flibox[]'>
<input type="text" name="flibox_values">
<input type="button" value="Submit" onclick="checkbox_values();">
Avatar billede shjorth Nybegynder
17. januar 2010 - 18:52 #2
Tak for svaret. Virker jo fint, men er det muligt at lave uden brug af "document.getElementsByName". Da den ikke kan bruges i fbjs (facebook java script).
Avatar billede intenz Novice
17. januar 2010 - 19:38 #3
Jeg har ikke arbejdet med det (fbjs). I princippet kan det godt, du skal så bare finde en anden måde at hente det array af elementer der skal bruges.

Jeg har kigget hurtigt på:
http://wiki.developers.facebook.com/index.php/FBJS

Jeg kan se getElementById burde virke. Så mon ikke man lige kan lave den lidt om med det.

Jeg har brugt childNotes og name her også. De ser ud til at være understøttet. Du må selv lige skrive den om til FBJS sprog, men det burde ikke være et problem :)

<script>
function checkbox_values() {
    resultat = '';
    checkboxDiv = document.getElementById('checkbox_elements');
    // hent child notes fra checkboxDiv
    childElements = checkboxDiv.childNodes;
    for (var i = 0; i < childElements.length; i++ ) {
        // tjek om child er af den rigtige type (efter navn)
        if (childElements[i].name == 'flibox[]') {
            if (childElements[i].checked == true) {
                if (resultat == '') resultat = childElements[i].value;   
                else resultat += ','+childElements[i].value;
            }
        }
    }
    document.getElementById('flibox_values').value = resultat;
}
</script>

<div id="checkbox_elements">
    <input type='checkbox' value='1' name='flibox[]'>
    <input type='checkbox' value='2' name='flibox[]'>
    <input type='checkbox' value='3' name='flibox[]'>
</input>
<input type="text" name="flibox_values">
<input type="button" value="Submit" onclick="checkbox_values();">
Avatar billede intenz Novice
17. januar 2010 - 19:43 #4
Hov, HTML delen skulle selvfølgelig være:
<div id="checkbox_elements">
    <input type='checkbox' value='1' name='flibox[]'>
    <input type='checkbox' value='2' name='flibox[]'>
    <input type='checkbox' value='3' name='flibox[]'>
</div>
<input type="text" name="flibox_values">
<input type="button" value="Submit" onclick="checkbox_values();">
Avatar billede shjorth Nybegynder
17. januar 2010 - 19:47 #5
Jeg får fejlen "childElements undefined".. Prøver lige at gennemskue hvad det kan være
Avatar billede intenz Novice
17. januar 2010 - 19:54 #6
Det virker fint her, lige med et rettelse i HTML delen til:
<div id="checkbox_elements">
    <input type='checkbox' value='1' name='flibox[]'>
    <input type='checkbox' value='2' name='flibox[]'>
    <input type='checkbox' value='3' name='flibox[]'>
</div>
<input type="text" id="flibox_values">
<input type="button" value="Submit" onclick="checkbox_values();">

Testet i IE 8 og firefox 3.5
Avatar billede shjorth Nybegynder
17. januar 2010 - 19:56 #7
Det er facebook der returnerer den fejl.. Det er ikke en fejl-meddelse du kender ?
Avatar billede intenz Novice
17. januar 2010 - 20:05 #8
Jo, det skyldes at den ikke returnerer disse elementer som den burde:
childElements = checkboxDiv.childNodes

Prøv at copy/paste den kode du har efter du har rettet det til fbjs kode.
Avatar billede shjorth Nybegynder
17. januar 2010 - 20:11 #9
Således ser den ud nu:

<? require("functions.inc.php"); ?>
<script>
function checkbox_values() {
    resultat = '';
    checkboxDiv = document.getElementById('checkbox_elements');
    // hent child notes fra checkboxDiv
    childElements = checkboxDiv.childNodes;
    for (var i = 0; i < childElements.length; i++ ) {
        // tjek om child er af den rigtige type (efter navn)
        if (childElements[i].name == 'flibox[]') {
            if (childElements[i].getChecked == true) {
                if (resultat == '') resultat = childElements[i].getValue(); 
                else resultat += ','+childElements[i].getValue();
            }
        }
    }
    document.getElementById('flibox_values').setValue(resultat);
}
</script>

<div id="checkbox_elements">
    <input type='checkbox' value='1' name='flibox[]'>
    <input type='checkbox' value='2' name='flibox[]'>
    <input type='checkbox' value='3' name='flibox[]'>
</div>
<input type="text" name="flibox_values">
<input type="button" value="Submit" onclick="checkbox_values();">
Avatar billede intenz Novice
17. januar 2010 - 20:17 #10
Du skal ændre både childNotes og name til fbjs værdierne:

childElements = checkboxDiv.childNodes

Til:
childElements = checkboxDiv.getChildNodes();

og:
childElements[i].name

til:
childElements[i].getName();

Desuden har du vist en fejl i:
childElements[i].getChecked

Alle FBJS 'værdierne' er metoder, og skal derfor have () efter.
Så ændre det til:
childElements[i].getChecked()
Avatar billede intenz Novice
17. januar 2010 - 20:17 #11
hov.
childElements[i].getName(); skal være:
childElements[i].getName()

Altså uden ;
Avatar billede shjorth Nybegynder
17. januar 2010 - 20:28 #12
Okay, koden ser nu således ud, men jeg får flg fejl:
document.getElementById("flibox_values") is null

<script>
function checkbox_values() {
    resultat = '';
    checkboxDiv = document.getElementById('checkbox_elements');
    // hent child notes fra checkboxDiv
    childElements = checkboxDiv.getChildNodes();
    for (var i = 0; i < childElements.length; i++ ) {
        // tjek om child er af den rigtige type (efter navn)
        if (childElements[i].getName() == 'flibox[]') {
            if (childElements[i].getChecked == true) {
                if (resultat == '') resultat = childElements[i].getValue(); 
                else resultat += ','+childElements[i].getValue();
            }
        }
    }
    document.getElementById('flibox_values').setValue(resultat);
}
</script>

<div id="checkbox_elements">
    <input type='checkbox' value='1' name='flibox[]'>
    <input type='checkbox' value='2' name='flibox[]'>
    <input type='checkbox' value='3' name='flibox[]'>
</div>
<input type="text" name="flibox_values">
<input type="button" value="Submit" onclick="checkbox_values();">
Avatar billede intenz Novice
17. januar 2010 - 20:36 #13
Du skal ændre din HTML som jeg skrev i #6
Avatar billede shjorth Nybegynder
17. januar 2010 - 20:42 #14
Hmm spøjst.. Nu er fejlene stoppet, men den skriver ikke noget i text feltet..

Hmm
Avatar billede shjorth Nybegynder
17. januar 2010 - 20:53 #15
@Intenz

Point er naturligvis dine. Jeg kunne godt tænke mig, dels at få det til at virke, og dels at få det integreret med AJAX (som er planen). Hvis du er interesseret vil jeg gerne betale dig lidt for det. Vi kan evt aftale nærmere per mail, hvis det har interesse.
Avatar billede intenz Novice
17. januar 2010 - 21:10 #16
Du havde ændret denne:
<input type="text" name="flibox_values">

Til:
<input type="text" id="flibox_values">

?


Jeg kan godt lave det, men min pris lægger nok ikke på "betale dig lidt" niveau, hvis det er mere end et par småting.

Jeg tager 300,- kr. ekskl. moms pr. påbegyndt time for freelance arbejde. Men min mail står i min profil hvis du er interesseret.
Avatar billede shjorth Nybegynder
17. januar 2010 - 21:24 #17
Herligt.

Jeg har sendt dig en mail, og takker for svar :)
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