Avatar billede jonasaarhus Nybegynder
23. maj 2003 - 17:36 Der er 14 kommentarer

Skift background-color i TD med checkbox

Jeg vil gerne skifte bg farve på en række af <TD>´s.
Det skal gøres via en "afvingning" i en checkbox. checkboxen er selv i en af de <TD> der skal skifte farve.

function tdShift() {
  for (i=1;i<7;i++) {
    document.all['td_body_'+i].className = 'checkbox-click';
  }
}

...

<td class="td_body" name="td_body_3"><input class="input-box" onClick="tdShift();" type="checkbox" name="state" value=""></td>
Avatar billede roenving Novice
23. maj 2003 - 17:40 #1
En smule ændring i denne her ...

<script language="javascript" type="text/javascript">
function makeGreen(t){
  var tds = document.getElementsByTagName("td");
  for (i=0;i<tds.length;i++) {
    if (tds[i].id.indexOf("farve")!=-1) {
      tds[i].style.backgroundColor="#FFFFFF";
    }
  }
  t.style.backgroundColor="#00FF00"
}
Avatar billede roenving Novice
23. maj 2003 - 17:43 #2
Har dine td'er som skal skifte farve en særlighed?

-- i den ovenstående kodestump hedder de alle noget med farve, er alle dine som skal skifte farve de eneste, som hedder td_body_?-)
Avatar billede roenving Novice
23. maj 2003 - 17:46 #3
<script language="javascript" type="text/javascript">
function tdShift() {
  var tds = document.getElementsByTagName("td");
  for (i=0;i<tds.length;i++) {
    if (tds[i].name.indexOf("td_body_")!=-1) {
      tds[i].className='checkbox-click';
    }
  }
}
</script>
Avatar billede pelkjaer Nybegynder
23. maj 2003 - 18:01 #4
og med IE4 også

function tdShift() {
  if (document.getElementById) {
    var tds = document.getElementsByTagName('TD');
    for (i=0; i<tds.length; i++) {
      if (tds[i].id.indexOf("td_body_")!=-1) {
        tds[i].className = "checkbox-click";
      }
    }
  }
  if (document.all) {
    var tds = document.all.tags('TD');
    for (i=0; i<tds.length; i++) {
      if (tds[i].name.indexOf("td_body_")!=-1) {
        tds[i].className = "checkbox-click";
      }
    }
  }
}

Dog er det ikke optimalt med klasseskift, det er ret langsomt.
Avatar billede roenving Novice
23. maj 2003 - 18:06 #5
>>pelkjaer

-- det har du vel nok ret i, men brugeren opdager det næppe, hvis hans maskine kører med mere end 200 MHz :O)

-- til gengæld er metoden vel egentlig den anbefalede idag ...
Avatar billede roenving Novice
23. maj 2003 - 18:07 #6
Skulle man så ikke også lige sætte en else ind, så den ikke gør det to gange (IE5+) ...
Avatar billede jonasaarhus Nybegynder
23. maj 2003 - 18:20 #7
Jeg ved ikke hvordan jeg giver dig(roenvig) de der points :-(
PS: nu ændrer den sig når man sætter en vinge, men scriptet går ikke tilbage til den "gamle" classe når man fjerner vingen igen.
Avatar billede jonasaarhus Nybegynder
23. maj 2003 - 18:22 #8
Det fanme dårlig brugervenlighed. Jeg kan ikke give point :-(
Avatar billede roenving Novice
23. maj 2003 - 18:26 #9
Så skal vi have en skift-parameter at reagere på (også med udgangspunkt i pelkjaers kommentar):

var shiftTD=true;
function tdShift() {
  if (document.getElementById) {
    var tds = document.getElementsByTagName('TD');
    for (i=0; i<tds.length; i++) {
      if (tds[i].id.indexOf("td_body_")!=-1) {
        if (shiftTD){
          tds[i].className = "checkbox-click";
        }else{
          tds[i].className = "td_body";
        }
      }
    }
  }else{
    if (document.all) {
      var tds = document.all.tags('TD');
      for (i=0; i<tds.length; i++) {
        if (tds[i].name.indexOf("td_body_")!=-1) {
          if (shiftTD){
            tds[i].className = "checkbox-click";
          }else{
            tds[i].className = "td_body";
          }
        }
      }
    }
  }
}

hth
jes
Avatar billede asand Nybegynder
23. maj 2003 - 18:27 #10
Det er fordi han ikke har svaret. Han svarer sjældent.
Avatar billede roenving Novice
23. maj 2003 - 18:27 #11
og jeg glemte:

var shiftTD=true;
function tdShift() {
  shiftTD=!shiftTD;
Avatar billede jonasaarhus Nybegynder
23. maj 2003 - 18:54 #12
Jeg kan ikke få det nye du har sendt til at virke, roenvig :-(
Avatar billede roenving Novice
23. maj 2003 - 22:57 #13
Hvis vi tager min oprindelige:

<script language="javascript" type="text/javascript">
var shiftTD=true;
function tdShift() {
  var tds = document.getElementsByTagName("td");
  for (i=0;i<tds.length;i++) {
    if (tds[i].name.indexOf("td_body_")!=-1) {
        if (shiftTD){
          tds[i].className = "checkbox-click";
        }else{
          tds[i].className = "td_body";
        }
    }
  }
  shiftTD=!shiftTD;
}
</script>

så skulle den virke med det samme ... jeg checker lige udvidelsen ...
Avatar billede olebole Juniormester
23. maj 2003 - 23:23 #14
<ole>

roenving >> pelkjaer har helt ret i, at klasse-skift skal undgåes, hvor det overhovedet kan. MS anbefaler det endda selv.
Det betyder en hel del ... også selvom maskinen kører 2 GHz eller mere. Det er sådan set helt uden betydning.
At det går langsomt, er blot et tegn på, at metoden bruger en bunke unødige resourcer, da den kræver, at hele dokumentet faktisk reformateres, hvergang en klasse skiftes.

Specielt hvis man laver lidt større JS-applikationer, er det et blandt mange performance-problemer. Et godt eksempel er dette spm:
  http://www.eksperten.dk/spm/344547
om et CMS, der crasher IE6 på en _meget_ hurtig maskine. Det skyldes med højglansforkromet statsgaranti dårlig performende kode  ;o)

/mvh
</bole>
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