Avatar billede aerobee Nybegynder
10. september 2009 - 14:15 Der er 7 kommentarer

loop igennem a tags indenfor et givent id

Jeg har følgende links:

<div id="menublocks">
  <a href="#" id="1" onclick="bgchange(); changeme(this);">
      tekst her
  </a>
  <a href="#" id="2" onclick="bgchange(); changeme(this);">
      tekst her
  </a>
  <a href="#" id="3" onclick="bgchange(); changeme(this);">
      tekst her
  </a>
</div>

Med tilhørende java script:

//leftmenu color change
function bgchange(){
  var menus = document.getElementById("menublocks").getElementsByTagName("a");
    for (var i=0;i<menus.length;i++) {
        menus[i].style.background = '#ebebeb';
        menus[i].style.color = '333';
    }
};

//same
function changeme(var1){
    var1.style.background = '#336699';
    var1.style.color = '#fff';
};

Hvad vil jeg gerne opnå ?
At når jeg klikker på et link ændres bg farven til #336699 og alle andre links nulstilles til bg farven #ebebeb - altså kun 1 link af gangen må have bg farven #336699 (det link man har klikket på).

Som det er nu, gør function bgchange() det kun ved det første link - selvom jeg forsøger at loope igennem dem alle.

Jeg bruger også som du kan se 2 funktioner for at opnå noget forholdsvis simpelt. Det ville jo være lækkert hvis man kunne nøjes med 1 funktion.

Nogle bud ville var en stor hjælp :)
Avatar billede olebole Juniormester
10. september 2009 - 14:51 #1
<ole>

Væsentligt simplere tilgang:


<script type="text/javascript">
var oActiveA = null;
function changeme(oA){
    if (oActiveA) {
        oActiveA.style.background = '#ebebeb';
        oActiveA.style.color = '#333';
    }
    oActiveA = oA;
    oActiveA.style.background = '#336699';
    oActiveA.style.color = '#fff';   
}
</script>

<div id="menublocks">
  <a href="#" id="1" onclick="changeme(this);">
      tekst her
  </a>
  <a href="#" id="2" onclick="changeme(this);">
      tekst her
  </a>
  <a href="#" id="3" onclick="changeme(this);">
      tekst her
  </a>
</div>



/mvh
</bole>
Avatar billede olebole Juniormester
10. september 2009 - 14:52 #2
PS: Husk en ID ikke må begynde med et tal, men skal begynde et bogstav eller underscore  ;o)
Avatar billede aerobee Nybegynder
10. september 2009 - 14:56 #3
Mange tak for hjælpen olebole.
Tænkte nok dette kunne gøres på en simplere måde.
Smider du et svar :)
Avatar billede aerobee Nybegynder
10. september 2009 - 14:56 #4
Og tak for tippet ang. id'et
Avatar billede aerobee Nybegynder
10. september 2009 - 14:59 #5
Men hvad nu med dette scenarie ?

Inaktiv link har farven ebebeb
Aktivt link har farven 6f6f6f
Og onmouseover (hover) har farven 336699

hover er defineret via css.
Der spiller ovenstående kode desværre ikke. Har man klikket på et link virker hover ikke mere ?
Avatar billede aerobee Nybegynder
10. september 2009 - 16:56 #6
Nå jeg hover over et af de links jeg allerede har klikke på før (og klikket væk fra igen) så virker hover ikke. Bg forbliver i farven #ebebeb. Men hover jeg over et link jeg ikke har klikket på før så virker hover.

Så javascriptet må på en eller anden måde konfliktere med :hover i css ?
Avatar billede aerobee Nybegynder
10. september 2009 - 18:12 #7
Så skulle problemet gerne være løst.
Ved at indsætte !important i min css "opprioteres" den angivede style, da stylen sat via js ellers var øverst prioteret.

Eksempel:
#menublocks a:hover{background-color:#336699 !important; color:#fff !important;}
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