Avatar billede mike2002 Nybegynder
20. maj 2008 - 01:02 Der er 13 kommentarer og
1 løsning

Sætte værdi i hidden field

Jeg er relativ ny javascript, så ... osv...

Jeg har en side med diverse input felter mm. og også nogle checkboxes. Ideen er, at når en bruger checker checkboxen, skal javascript skrive til et (indtil videre) tomt hidden felt.

Lidt kode:
eksempel på en checkbox:

    <td width="15%"><INPUT TYPE="HIDDEN" NAME="IbCap4" VALUE="CD">
    <input type="checkbox" name="IbData4" value="Y" onClick="if(this.checked){setMuSrc('cd')}">Cd</td>

hidden fields til sidst (der er 30 ialt):

    <INPUT TYPE="HIDDEN" ID="MuSrcCd11" NAME="MuSrcCd11" VALUE="">
    <INPUT TYPE="HIDDEN" ID="MuSrcCd21" NAME="MuSrcCd21" VALUE="">
    <INPUT TYPE="HIDDEN" ID="MuSrcCd31" NAME="MuSrcCd31" VALUE="">
    <INPUT TYPE="HIDDEN" ID="MuSrcCd41" NAME="MuSrcCd41" VALUE="">

Og Javascript i starten:

<script type="text/javascript" language="javascript">

function setMuSrc(type) { // Function to set the music source value in the hidden fields
   
    var i = 1;
    var k = 0;
    var j = 1;
    var field;
    while(i < 7)
    {
   
        for(j = 1; j < 6; j++)
        {
            field = 'MuSrcCd' + i + j;
            if(document.getElementById('MuSrcCd' + i + j).value == '')
            {
                document.getElementById(field).value = type;
            }
        }
    i++;

    }
}
</script>

Jeg ved godt (tror jeg), at funktionen som den ser ud nu, principielt ville give alle de felter, der ikke har nogen værdi, samme værdi, men lige nu er mit problem overhovedet at tildele værdi til nogen felter overhovedet....

Jeg har prøvet et hav af kombinationer: fx. document.forms[0][field].value = type, document.forms['myform']['MuSrcCd' + i + j].value = type, getElementsById('MuSrcCd' + i + j).value = type m.fl., så jeg håber der sidder én eller anden ekspert derude og siger: "Det er fordi du liiige mangler så'n og så'n"....
Avatar billede olebole Juniormester
20. maj 2008 - 01:17 #1
<ole>

Variablen field vil altid indeholde 'NaN' (Not a Number). I linjen:
    field = 'MuSrcCd' + i + j;

- prøver du at lægge en streng sammen med to tal - hvilket gør JavaScript 'forvirret'. Prøv i stedet:
    field = 'MuSrcCd' + String(i) + String(j);


/mvh
</bole>
Avatar billede olebole Juniormester
20. maj 2008 - 01:19 #2
Prøv i øvrigt at bruge alert til debugging. Mon ikke dette ville have fanget din fejl:

            field = 'MuSrcCd' + i + j;
            alert(field);
            if(document.getElementById('MuSrcCd' + i + j).value == '')
Avatar billede olebole Juniormester
20. maj 2008 - 01:20 #3
- eller:

            if(document.getElementById('MuSrcCd' + i + j).value == '')
            {
                alert("Hep");
                document.getElementById(field).value = type;
            }

Hvis du aldrig ser et 'Hep', ved du jo, at ID'en må være forkert    ;o)
Avatar billede mike2002 Nybegynder
20. maj 2008 - 01:24 #4
Ok, tak for input - det var selvfølgelig logisk at fortælle javascript, at der er tale om en streng. Det hjalp desværre bare ikke synderlig... Nu får jeg 'et objekt var ventet' - fejl...

<script type="text/javascript" language="javascript">

function setMuSrc(type) { // Function to set the music source value in the hidden fields
   
    var i = 1;
    var k = 0;
    var j = 1;
    var field;
    while(i < 7)
    {
   
        for(j = 1; j < 6; j++)
        {
            field = 'MuSrcCd' + string(i) + string(j);
            if(document.getElementById('MuSrcCd' + string(i) + string(j)).value == '')
            {
                document.getElementById(field).value = type;
            }
        }
    i++;

    }
}

</script>
Avatar billede mike2002 Nybegynder
20. maj 2008 - 01:30 #5
Hvis jeg gør sådan her:

    while(i < 7)
    {
   
        for(j = 1; j < 6; j++)
        {
            field = 'MuSrcCd' + i + j;
            if(document.getElementById('MuSrcCd' + i + j).value == '')
            {
                alert(field);
            }
        }
    i++;

    }

får jeg vist navnene på alle de tomme hidden fields....

Så helt forvirret kan javascript da ikke være...
Avatar billede mike2002 Nybegynder
20. maj 2008 - 01:31 #6
Og alle navnene er rigtige...
Avatar billede mike2002 Nybegynder
20. maj 2008 - 01:33 #7
Måske er det mig, der er ude på noget snavs her.

Men skulle jeg ikke kunne se - via "vis kilde" - om de relevante felter er blevet sat...?

Eller skal jeg virkelig poste formen før jeg ved, om de er sat rigtigt (det har jeg nemlig ikke prøvet endnu)?
Avatar billede mike2002 Nybegynder
20. maj 2008 - 01:35 #8
Nå, det er slut for mig for i aften... Håber der er nogen der kan hjælpe mig i morgen...
Avatar billede w13 Novice
20. maj 2008 - 10:20 #9
Nej, når javascript laver rettelser, kan det ikke ses i "Vis kilde". "Vis kilde" vil altid stå, som da siden blev indlæst.

Du kan dog bruge JavaScript i adresselinjen for at debugge:

java script:alert(document.getElementById('id på et element').outerHTML);void(0)
Avatar billede olebole Juniormester
20. maj 2008 - 22:02 #10
- men der kan kun debugges i IE (selvom man bruger parentNode's innerHTML), da attributten ifølge standarden faktisk ikke må ændre sig, når feltets value ændres. Dette overholdes bl.a. i FF  ;o)
Avatar billede mike2002 Nybegynder
21. maj 2008 - 14:19 #11
Ok, tak for al jeres hjælp!

Scriptet virkede jo fint nok - jeg var bare ikke klar over, at det ikke ville kunne ses ved "vis kilde".

Der er points for jeres tid og råd! Tak!
Avatar billede w13 Novice
22. maj 2008 - 12:42 #12
Ikke til mig i hvert fald. =)
Avatar billede w13 Novice
22. maj 2008 - 12:43 #13
Det skulle ikke have været et svar. Sry.
Avatar billede mike2002 Nybegynder
28. september 2008 - 17:58 #14
Lukker her
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