Avatar billede haunted Nybegynder
25. april 2008 - 14:54 Der er 10 kommentarer og
1 løsning

Anden funktion end getElementById

Hej med jer.

jeg har nedenstående kode som i dag virker:

Forklaring: Man trykker på et link og linket ændrer funktionen der kaldes næste, gang man klikker på samme link.

HTML...

<code>   
    <a id="test" name="tester1" href="#" onclick="klikket("test");">Testknap</a>
</code>

Javascript...   

<code>
    function klikket(id) {
        knap = document.getElementById(id).style.display='block';
       
        knap.onclick = function () { denneSkalNuKaldesIStedet(id); return false; };
        knap.innerHTML = 'Ny funktion';
    }

    function denneSkalNuKaldesIStedet(id) {
        // DoSomething
    }
</code>
   
Spørgsmålet...

Nu er det så at jeg ville høre om man kunne lave det samme ved at bruge en anden funktion end getElementById? f.eks. getElementsByName eller andet? Hvordan gør man??

Grunden til jeg ikke kan bruge denne er at der er en style bundet op på id'et test som jeg ikke kan ændre, og jeg har et variabelt antal testere.

Dvs. jeg skal faktisk have:
<code>
    <a id="test" name="tester1" href="#" onclick="klikket("tester1");">Testknap</a>
    <a id="test" name="tester2" href="#" onclick="klikket("tester2");">Testknap</a>
    <a id="test" name="tester3" href="#" onclick="klikket("tester3");">Testknap</a>
    <a id="test" name="tester4" href="#" onclick="klikket("tester4");">Testknap</a>
</code>
Jeg har en

a#test ... {
    osv. osv.
}

Håber spørgsmålet er til at forstå.
Avatar billede haunted Nybegynder
25. april 2008 - 14:55 #1
Nå jeg troede <code> indlejrede min kode i en boks...
Avatar billede w13 Novice
25. april 2008 - 15:12 #2
Reglen er: aldrig ha' 2 ens id'er!

Og det giver jo også mening, for definitionen af et id er jo "noget der er unikt". Hvis du har 7 af det samme id på siden, er det ikke ligefrem særlig unikt. ;)

En anden ting er, at innerHTML ikke er en valid i nogen standard, om end den virker i alle browsere, så du bør rette:
        knap.innerHTML = 'Ny funktion';
til:
        knap.firstChild.nodeValue = 'Ny funktion';

Og så til sagen:
Hvorfor sætter du ikke bare id'erne til tester1, tester2, tester3, osv. i stedet for at sætte disse på name?
(Det er i øvrigt heller ikke "tilladt" at sætte name-attributter på A-tags.)

Og som svar på dit spørgsmål, så kan du bruge getElementsByTagName("a") som giver en liste over alle a-tags. Så kan du f.eks. det første ved at skrive document.getElementsByTagName("a")[0], det andet med document.getElementsByTagName("a")[1], osv. Du kan også lave en løkke, der kører alle disse igennem.
Avatar billede w13 Novice
25. april 2008 - 15:16 #3
Men hvis det nu skal være helt optimalt, så kan du også bare overføre "this", som giver en reference til det element, man klikkede på. Se dette eksempel:

<script type="text/javascript">
    function klikket(knap) {
        knap.style.display = 'block';
       
        knap.onclick = function(){ denneSkalNuKaldesIStedet(knap); return false };
        knap.innerHTML = 'Ny funktion';
    }

    function denneSkalNuKaldesIStedet(knap) {
        // DoSomething
    }
</script>
   
    <a id="test" name="tester1" href="#" onclick="klikket(this);">Testknap</a>
    <a id="test" name="tester2" href="#" onclick="klikket(this);">Testknap</a>
    <a id="test" name="tester3" href="#" onclick="klikket(this);">Testknap</a>
    <a id="test" name="tester4" href="#" onclick="klikket(this);">Testknap</a>
Avatar billede haunted Nybegynder
25. april 2008 - 17:23 #4
Undskyld svartiden.

Det ser brugbart ud, jeg lurer lige lidt på det og vender tilbage. Tak for hjælpen indtil videre.
Avatar billede olebole Juniormester
25. april 2008 - 21:12 #5
<ole>

- og jeg tør vædde på, det var en fejl, w13 ikke fik slettet id'erne. Husk at få dem slettet  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
25. april 2008 - 21:17 #6
En lille huskeregel:

id ~ personnummer
name ~ navn

To personer kan ikke dele personnummer ~ to elementer kan ikke dele id
To personer kan godt dele navn ~ to elementer kan godt dele navn
Avatar billede olebole Juniormester
25. april 2008 - 21:18 #7
- argh!
    To personer kan godt dele navn ~ to elementer kan godt dele name  =)
Avatar billede roenving Novice
28. april 2008 - 13:58 #8
-- og så skal funktionstildelingen jo også bruge this:

knap.onclick = function(){ denneSkalNuKaldesIStedet(this); return false };

-- da teksten først fortolkes som javascript, når funktionen udføres, og så er værdien af knap meget sjældent det oprindelige objekt !-)
Avatar billede haunted Nybegynder
05. november 2010 - 18:06 #9
Nu er det vidst tid til en lukning af denne. Hvis i gider smide et svar så får i point hvis i stadig er på eksperten :0)
Avatar billede w13 Novice
05. november 2010 - 18:27 #10
:)
Avatar billede w13 Novice
09. november 2010 - 23:08 #11
Tak for point!
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