Avatar billede daniel_d Nybegynder
25. oktober 2008 - 01:26 Der er 4 kommentarer og
1 løsning

Kan ikke få variabel til at spille i if sætning

Hejsa

Jeg har et problem med en variabel i en if sætning som jeg bare ikke kan få til at spille...

Her er først en version hvor variablen er erstattet med en fast værdi og det virker:

function checkAllBoxes( n, fldName, toggleName ) {
    var c = 'document.adminForm.' + toggleName + '.checked';
    var n2 = 0;
   
    if ( document.adminForm.togglelink.checked == 0) {
        for (i=0; i < n; i++) {
            cb = eval( 'document.adminForm.' + fldName + '' + i );
            if (cb) {
                cb.checked = 0;
                n2++;
            }
        }
    }
    else {
        for (i=0; i < n; i++) {
            cb = eval( 'document.adminForm.' + fldName + '' + i );
            if (cb) {
                cb.checked = c;
                n2++;
            }
        }
    }

}

Men erstatter jeg

if ( document.adminForm.togglelink.checked == 0) {

med

if ( c == 0) {

hvor variablen c = 'document.adminForm.' + toggleName + '.checked'
så virker skidtet ik.

laver jeg en alert(c); for at tjekke værdien af c, så får jeg: document.adminForm.togglelink.checked

Så hvorfor spiller det ik?
NB: Er javascript newbie
Avatar billede tjp Mester
25. oktober 2008 - 01:34 #1
Fordi 'document.adminForm.' + toggleName + '.checked' er en tekststreng, mens document.adminForm.togglelink.checked er en værdi, og strengen 'document.adminForm.togglelink.checked' er ikke lig med 0.
Avatar billede daniel_d Nybegynder
25. oktober 2008 - 01:44 #2
aha, men så kommer det logiske spørgsmål dertil. Hvordan skal det så formuleres korrekt, så jeg får værdien og ikke tekststrengen?
Avatar billede daniel_d Nybegynder
25. oktober 2008 - 02:22 #3
Fandt ud af det: if ( eval('document.adminForm.' + toggleName + '.checked') == 0) {
Tak for hjælpen - fik ledt mig på rette spor.

Kaster lidt point efter dig :)
Avatar billede roenving Novice
25. oktober 2008 - 10:47 #4
-- og du kan sagtens få fat i den, men vær opmærksom på, at det er html3.2 DOM, så det vil ikke virke i al fremtid ...

-- hrm, og så gør du noget skørt, du har jo værdien, så du skal bare:

function checkAllBoxes( n, fldName, toggleName ) {
  var f = document.adminForm;
  var c = f[toggleName].checked;
  var n2 = 0;
  for (i=0; i < n; i++) {
    cb = f[fldName+i];
    if (cb) {
      cb.checked = c;
      n2++;
    }
  }
}

-- og du behøver slet ikke navnet, for du kalder den vel på onclick på checkboxen, så du kan bare sende en reference eller om den er checked:

Check/rens alle: <input type="checkbox" onclick="checkAllBoxes(4,'mineChecks',this.checked);">

-- og så:

function checkAllBoxes( n, fldName, c ) {
  var f = document.adminForm;
  var n2 = 0;
  for (i=0; i < n; i++) {
    cb = f[fldName+i];
    if (cb) {
      cb.checked = c;
      n2++;
    }
  }
}

-- hvad bruger du iøvrigt n2 til, skal det ikke bare være:

function checkAllBoxes( n, fldName, c ) {
  var f = document.adminForm;
  for (i=0; i < n; i++) {
    cb = f[fldName+i];
    if (cb)
      cb.checked = c;
  }
}
Avatar billede roenving Novice
25. oktober 2008 - 10:48 #5
-- og endnu kortere:

function checkAllBoxes( n, fldName, c ) {
  var f = document.adminForm;
  for (i=0; i < n; i++) {
    if (cb = f[fldName+i])
      cb.checked = c;
  }
}
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