Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 19:34 Der er 24 kommentarer og
1 løsning

Elementer på siden

Hej,

hvordan finder jeg antal select-tags på en HTML via Javascript? jeg har et script som skal løbe de valgte værdier i en række select-bokse igennem..og til den for() løkke skal jeg bruge det samlede antal elementer.
Avatar billede nute Nybegynder
12. marts 2004 - 19:43 #1
<html>
<head>
    <script language="JavaScript" type="text/javascript">
    <!--
        function showSelect()
        {
            var arrSelect = document.getElementsByTagName( "select" );
            for( i = 0; i < arrSelect.length; i++ )
            {
                alert( arrSelect[i].id );
            }
        }
    //-->
    </script>
</head>
<body onload="showSelect();">
<select id="en"></select>
<select id="to"></select>
<select id="tre"></select>
<select id="fire"></select>
</body>
</html>
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 20:03 #2
Ah...den er ellers meget tæt på. Men jeg glemte vidst at tilføje at det ikke er ALLE select tags :( Du får pointsne anyway...men hvis du kan hjælpe med det her...sååh... :D
Avatar billede nute Nybegynder
12. marts 2004 - 20:13 #3
så er det nemmest at bestemme hvilke elementer du skal have fat i, og lægge dem i en array:


<html>
<head>
    <script language="JavaScript" type="text/javascript">
    <!--
        var arrElements = ["en","tre"]
        function showSelect()
        {
           
            for( i = 0; i < arrElements.length; i++ )
            {
                var objElement = document.getElementById( arrElements[i] );
                alert( objElement.id )
            }
        }
    //-->
    </script>
</head>
<body onload="showSelect();">
<select id="en"></select>
<select id="to"></select>
<select id="tre"></select>
<select id="fire"></select>
</body>
</html>
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 20:18 #4
Nu har jeg +40 elementer..hvoraf der måske er 6 ialt som ikke skal medregnes...såhh.. kan man ikke lave det modsat?
Avatar billede nute Nybegynder
12. marts 2004 - 20:24 #5
jow .. det kan man da ...
<html>
<head>
    <script language="JavaScript" type="text/javascript">
    <!--
        var strElementerSomIkkeSkalMed = "en,tre";
        function showSelect()
        {
            var arrSelect = document.getElementsByTagName( "select" );
            for( i = 0; i < arrSelect.length; i++ )
            {
                if( strElementerSomIkkeSkalMed.indexOf( arrSelect[i].id ) == -1 )
                {
                    alert( arrSelect[i].id );
                }
            }
        }
    //-->
    </script>
</head>
<body onload="showSelect();">
<select id="en"></select>
<select id="to"></select>
<select id="tre"></select>
<select id="fire"></select>
</body>
</html>
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 20:53 #6
Dit eksempel virker jo glimrende. Sidder og fedter med at få det til at virke på min side. without luck.

Kalder funktionen således:  <select id="tftp" onchange="updatetotal();">

Og selve scriptet ser sådan ud:

<script type="text/javascript">
<!--
var strElementerSomIkkeSkalMed = "en,tre";
function updatetotal() {
forms[0].total.value = 0;

            var arrSelect = document.getElementsByTagName( "select" );
            for( i = 0; i < arrSelect.length; i++ )
            {
                if( strElementerSomIkkeSkalMed.indexOf( arrSelect[i].id ) == -1 )
                {
                    forms[0].total.value += arrSelect[i].id.value;
                }
            }
}
// -->
</script>

..og bliver kaldt via <script language="JavaScript" src="functions.js" type="text/javascript"></script>

Hvad gør jeg galt? (ved at jeg ikke har rette arrayet med de elementer som ikke skal medregnes. Er linjen                    forms[0].total.value += arrSelect[i].id.value;  korrekt?
Avatar billede nute Nybegynder
12. marts 2004 - 21:00 #7
jeg aner da ikke hvad du gør galt, for jeg aner ikke hvad du forventer.

desuden ... hvis du skal have fat i værdien til den option der er valgt, så skal du gøre sådan:

forms[0].total.value += arrSelect[i].options[ arrSelect[i].selectedIndex ].value;

/nute
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 21:30 #8
Nej det har du ret i. Siden skal beregne en total af nogle valg der er truffet i select-bokse. Et nyt aspekt i denne sag er værdien i select boksen faktisk ikke er den som skal beregnes...men værdien af select-boksen * en værdi som jeg endnu ikke ved hvor skal lagres. Værdien skal tilknyttes select-boksen.
Avatar billede nute Nybegynder
12. marts 2004 - 21:39 #9
hmm ... dette går jo *meget* langt udenfor det oprindelige spm .. du skal lære dig at udtrykke dig i forhold til det du søger.

hvis du skal have en "værdi knyttet til select-boksen", så ville jeg have lavet et hidden field for hver select hvor du "gemmer" din værdi.
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 21:44 #10
Ja...det er det, men jeg fandt først ud af det senere. De skjulte felter kan tælles nemmere end de andre fordi jeg ikke har andre skjulte :) super! Tak for hjælpen.
Avatar billede nute Nybegynder
12. marts 2004 - 21:50 #11
det var ikke en opfordring til at lukke dit spm (med mindre du faktisk har fået den hjælp du ønsker), men mere som en bemærkning om at du måske burde oplyse om at dine videre spm bevæger sig "udenom tema". Jeg har intet imod at hjælpe mere, men en tilkendegivelse fra din side på en "jeg har opdaget at jeg har et større problem som jeg ikke helt ved hvordan jeg skal løse"-agtig måde, ville være rart, for så viser du at du ikke tager hjælpen her inde for givet ;o]

/nute
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 22:06 #12
Endnu en gang har du ret, og denne information er hermed givet videre. Og jeg ved det til næste gang.

Mit problem lyder nu på en syntaks fejl på linje 1. Den linje må være i min functions.js, da første linje i hoveddokumentet ser sådan ud: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">

Hele functions.js ser således ud:

<script type="text/javascript">
<!--
var strElementerSomIkkeSkalMed = "en,tre";
function updatetotal() {
forms[0].total.value = 0;

            var arrSelect = document.getElementsByTagName( "select" );
            for( i = 0; i < arrSelect.length; i++ )
            {
                if( strElementerSomIkkeSkalMed.indexOf( arrSelect[i].id ) == -1 )
                {
                    forms[0].total.value += arrSelect[i].options[ arrSelect[i].selectedIndex ].value;

                }
            }
}
// -->
</script>

Hvor fejlen ligger henne er jeg godt nok på bar bund med...
Avatar billede roenving Novice
12. marts 2004 - 22:09 #13
Du skal (og må !-) ikke have <script></script>-tags i .js-fil !-)
Avatar billede nute Nybegynder
12. marts 2004 - 22:09 #14
hvis du har lagt alt dit javascript ud i en ekstern fil, så skal ikke <script> tags med. din 'function.js' skal kun se sådan ud:

var strElementerSomIkkeSkalMed = "en,tre";
function updatetotal() {
forms[0].total.value = 0;

            var arrSelect = document.getElementsByTagName( "select" );
            for( i = 0; i < arrSelect.length; i++ )
            {
                if( strElementerSomIkkeSkalMed.indexOf( arrSelect[i].id ) == -1 )
                {
                    forms[0].total.value += arrSelect[i].options[ arrSelect[i].selectedIndex ].value;

                }
            }
}

/nute
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 22:12 #15
Det løste problemet. og så skulle jeg lige tilføje  "document" foran forms[0]. Nu er problemet at den behandler værdierne som strenge, den ligger dem ikke sammen. (Har fjernet <script>)
Avatar billede nute Nybegynder
12. marts 2004 - 22:15 #16
du skal gøre om strenge til int med 'parseInt' metoden:

var str = "100";
var str2 = 100;

alert( str3 = parseInt( str ) + str2 )

/nute
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 22:22 #17
Dvs forms[0].total.value += arrSelect[i].options[ arrSelect[i].selectedIndex ].value

bliver til

forms[0].total.value += parseInt(arrSelect[i].options[ arrSelect[i].selectedIndex ].value)

?

Det kan jeg ikke få til at virke?
Avatar billede roenving Novice
12. marts 2004 - 22:28 #18
En value på et form-felt er altid en string, så den skal også konverteres, før du kan lave sammenlægningen ...

Hvis du _ved_ at der er talværdier, kan du lave det en anelse lettere med:

forms[0].total.value = +forms[0].total.value + +arrSelect[i].options[ arrSelect[i].selectedIndex ].value
Avatar billede nute Nybegynder
12. marts 2004 - 22:35 #19
roenving >> for nogen der ikke er helt "up to date" med/inde i/oplyst i/erfaren i/kender JS, så vil nok formen

+forms[0].total.value

være et rimelig kryptisk forslag

;o]
Avatar billede roenving Novice
12. marts 2004 - 23:00 #20
Tjah, det var måske også derfor, at jeg først skrev den rigtige løsning i tekst, og derefter angav et alternativ *g*
Avatar billede nute Nybegynder
12. marts 2004 - 23:05 #21
tjah ... det var måske derfor ... :-D
Avatar billede j_jorgensen Nybegynder
12. marts 2004 - 23:07 #22
Hvorfor ikke skrive +=  ?
Avatar billede roenving Novice
13. marts 2004 - 17:41 #23
Fordi du så tager udgangspunkt i en tekst-værdi for det er et form-felts value altid ...

parseInt(forms[0].total.value) er næsten det samme som +forms[0].total.value, nemlig en type-konvertering ...

Forskellen er, at parseInt altid returnerer et tal (0, hvis der ikke er et gyldigt tal i starten af teksten !-), men den vil så kun returnere hele tal (parseFloat skal bruges til decimal-tal)

+noget vil kun virke som forventet, hvis man er helt sikker på at noget indeholder en tal-værdi, men så er den til gengæld også ligeglad med formatet (og evt. decimaler m.v.)
Avatar billede nute Nybegynder
13. marts 2004 - 18:22 #24
roenving >> parseInt returnerer NaN hvis det ikke er et gyldig tal ;o]
Avatar billede roenving Novice
13. marts 2004 - 18:26 #25
-- sæ'fø'li', det var en forkert huskning ...

-- hvilket +'et forøvrigt også gør !-)
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