Avatar billede jhj_itp Nybegynder
09. februar 2004 - 13:22 Der er 10 kommentarer og
1 løsning

Mangler værdien af variabel med dynamisk navn

Hej.

Jeg mangler værdien af variabel med dynamisk navn. Jeg forestillede mig man kunne gøre noget lignende nedenstående, men det virker p.t. ikke:

<script language=javascript>
function test(id) {
  // Der findes fx 2 tekstfelter, som hedder henholdsvis txt_1 og txt_2.
  // id er dermed 1 eller 2.
  // Der der trykket submit og txt_1 og txt_2's værdier ses i adresselinjen
  // Jeg skal bruge værdien af txt_id
  alert("txt_"+id+" = "+getValue("txt_"+id));
} // function test
</script>

På forhånd tak for input
Avatar billede nute Nybegynder
09. februar 2004 - 13:31 #1
brug getElementById - den henter det formobjekt du søger. derefter henter du værdien ud med propertien 'value':

alert("txt_"+id+" = "+ document.getElementById( "txt_" + id ).value );

/nute
Avatar billede jhj_itp Nybegynder
09. februar 2004 - 13:57 #2
Det ser ikke ud til at virke efter hensigten. Mozilla Firebird sker der en fejl, I IE kommer der ingen javascript fejl, men værdien kommer ikke med alligevel!
Avatar billede jhj_itp Nybegynder
09. februar 2004 - 13:59 #3
Jeg tester på flg. kode:

<html>
<body>
<form>
<input type=text name=txt_1><br>
<input type=text name=txt_2><br>
<input type=submit>

<script language=javascript>
test(1);

function test(id) {
  alert("txt_"+id+" = "+ document.getElementById("txt_" + id ).value );
} // function test
</script>

</body>
</html>
Avatar billede nute Nybegynder
09. februar 2004 - 14:05 #4
det er jo fordi du ikke har 'id' attribut på dine formelement. du bruger metoden:

getElementById

som navnet på metoden angiver, så prøver du at aksessere et element via dets *ID* ... så længe du ikke har en 'id' attribut på dine element, så vil  den jo hellere ikke finde elementet. prøv:

<input type=text name= txt_1 id=txt_1>
<input type=text name= txt_2 id=txt_2>

så vil det fungere

/nute
Avatar billede jhj_itp Nybegynder
09. februar 2004 - 14:15 #5
Det gjorde den forskel, at der ikke længere kommer fejl i Mozilla, men jeg får stadig ingen value i  nogen af browserne! Desuden bruger jeg getElementById på en select boks et andet sted, hvor det virker, selv om der ikke er et id-felt!
Avatar billede nute Nybegynder
09. februar 2004 - 14:24 #6
når du laster siden, er jo dine elementer tomme. prøv denne, så vil du se at det fungerer:

<html>
<body>
<form>
skriv noget i felterne og klik på knappen<br>
<input type=text name=txt_1 id=txt_1><br>
<input type=text name=txt_2 id=txt_2><br>
<input type=button onclick="test();" value="klik for at se indhold">
<script language=javascript>
function test() {
    str = "";
    for( var id=1; id <= 2; id++)
    {
        str += "txt_" + id + " = " + document.getElementById("txt_" + id ).value + "\n";
    }
    alert( str );
} // function test
</script>
</body>
</html>

/nute
Avatar billede nute Nybegynder
09. februar 2004 - 14:25 #7
dette fungerer fint i min IE og mozilla
Avatar billede jhj_itp Nybegynder
09. februar 2004 - 14:40 #8
Øhmmm... ja, det kan du have ret i! Nu har jeg så også fået noget til at virke, men er lidt nervøs for at at eksemplet ikke løser problemet!

Detaljen er at den skal hente variablen via adresselinjen og ikke fra et input-felt! Det vil den fx gøre hvis man, når man submitter, går til en anden side, hvor der ikke er et felt, der hedder det samme som det variabelnavnet hedder.

Jeg ved ikke om jeg udtrykker mig klart nok....?
Avatar billede nute Nybegynder
09. februar 2004 - 14:57 #9
hvis du skal hente fra adresselinjer, så skal du til at søge efter parameteret i

document.location.search

fx på denne måde:

var strQueryString = (document.location.search).substring(1);
    var arrParams = strQueryString.split("&");
    var strId = null;
    for( i = 0; i < arrParams.length; i++ )
    {
        if( arrParams[ i ].indexOf( "id=" ) > -1 )
        {
            strId = arrParams[ i ].split( "=" )[1];
        }
    }
    if( strId != null )
    {
        var objElement = document.getElementById( "txt_" + id );
        if( objElement !=  null )
        {
            alert( objElement.id + " = " + objElement.value );
        }
    }

/nute
Avatar billede nute Nybegynder
09. februar 2004 - 14:57 #10
der manglede en 'break':

        if( arrParams[ i ].indexOf( "id=" ) > -1 )
        {
            strId = arrParams[ i ].split( "=" )[1];
            break;
        }

/nute
Avatar billede jhj_itp Nybegynder
09. februar 2004 - 15:42 #11
Fantastisk. Det virker. Tusind 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