Avatar billede gertnissen Nybegynder
27. september 2004 - 23:08 Der er 15 kommentarer og
1 løsning

Mouseclick - advanced event handler

Jeg har en del <a href tags. som jeg ikke ønsker at ændre i, f.eks. vil jeg ikke tilføje onMouseClick/onmouseover osv. på selve html linket.

Hvordan sætter jeg en event listener (addEvent/attachEvent ?) op i <script type="text/JavaScript"> ? så der f.eks. fyres en Alert() af med "http://" fra det pågældende link, når brugeren klikker på linket ?

Det er kun nødvendigt at det skal kun kunne bruges i MS IE 6.
Avatar billede olebole Juniormester
28. september 2004 - 00:06 #1
<ole>

<script type="text/JavaScript">
function bla() {
    document.getElementById("ib").attachEvent("onclick", ugh);
}
function ugh() {
    alert("Ugh");
    return false;
}
</script>

<button onclick="bla()">TEST</button><br><br>
<a id="ib" href="#">TEST</a>

/mvh
</bole>
Avatar billede olebole Juniormester
28. september 2004 - 00:12 #2
Men det lyder nu ikke somom, det er attachEvent, du umiddelbart leder efter. Mon ikke nærmere det er:

<script type="text/JavaScript">
function bla() {
    document.getElementById("ib").onclick = function() {
        ugh(this);
        return false;
    }
}
function ugh(elm) {
    alert(elm.href);
}
</script>

<button onclick="bla()">TEST</button><br><br>
<a id="ib" href="http://www.google.com">TEST</a>
Avatar billede skovenborg Nybegynder
28. september 2004 - 00:15 #3
Et eksempel med attachEvent kunne være:
<script type="text/javascript">
  function foo(e) {
        // e = event object
        alert("http://");
        if (e.srcElement) {
            e.srcElement.click();
        }
  }
  window.onload = function() {
        aElms = document.getElementsByTagName("A");
        addE = (document.addEventListener) ? true : false;
        attE = (document.attachEvent) ? true : false;

        for (i=0;i<aElms.length;i++) {
              if (addE) {
                  aElms[i].addEventListener("mousedown",foo,false);
              }
              if (attE) {
                  aElms[i].attachEvent("onmousedown",foo);
              }
        }
  }
</script>

<a href="http://www.google.com">Google</a> <br />
<a href="http://www.eksperten.dk">Eksperten</a>
<a href="http://www.google.dk">Google.dk</a>
Avatar billede skovenborg Nybegynder
28. september 2004 - 00:15 #4
... ikke fordi onclick er nogen dårlig metode - tænkte bare du ville se hvordan den blev brugt ;-)
Avatar billede olebole Juniormester
28. september 2004 - 00:50 #5
Tjooo ... med den foo-funktion, er der vel ikke så meget at hente med 'addEventListener'  ;o)
Avatar billede skovenborg Nybegynder
28. september 2004 - 20:03 #6
det var bare et eksempel - og gør faktisk hvad han spurgte om, nemlig at lave en alert med teksten "http://". Normalt vil jeg nok også bruge en onclick-metode som du viser...
Avatar billede gertnissen Nybegynder
28. september 2004 - 22:54 #7
Tak for hjælpen til jer begge.

skovenborg kom absolut tættest på den efterspurgte løsning, nemlig at der ikke måtte ændres i selve html-siden hvor de 'simple' <a href> tag står, som f.eks. tilføjning af onclick, id og lign.

Eneste lille bitte ændring jeg har lavet er fra alert("http://"); som er ændret til alert(e.srcElement.href); (fra olebole's eksempel), da jeg jo gerne ville have url'en fra href'en - og ikke bare "http://" som død tekst ;-)

Eksemplet virker perfekt, og kan bruges på alle sider som eksternt javascript uden yderligere ændringer på html 'værtssiden' - smider du et svar skovenborg ?

Ovenstående metode kan vel anvendes på alle elementer i html koden ?
Så man i lighed med CSS/Style slipper for JavaScript på sine HTML tags, så de fremstår 'rene'.
Avatar billede olebole Juniormester
29. september 2004 - 03:43 #8
Jeg er ikke helt med ... hvad tror du, du har ud af, at dine HTML-tags 'fremstår rene'. Du opbygger en ganske skrøbelig side på denne måde. Piller du f.eks. blot en anelse ved sidens innerHTML:
  document.body.innerHTML += '';
dør alle dine JS-kald.

Det er næsten altid en fordel at opbygge en mere robust kode - og så tage de få ekstra bytes med, 'ordentlige' event-handlers kræver.
Du kan godt gøre det mere robust, men det kræver, du er rimelig god til OOP ... men hvorfor ikke bare gøre som andre? Hvorfor ikke bruge HTML og JS, som de er tænkt?  :)
Avatar billede gertnissen Nybegynder
29. september 2004 - 10:04 #9
Hej olebole

Nu er det ikke blot for at spare et par bytes.

Jeg syntes selv at det er tillokkende at adskille data, html, style og script kode hvor muligt, men det er måske blot mig. Jeg vil hellere være "rimelig god til OOP", end at 'klistre' mine sider/tags til med javascript, styles og lign - måske lidt dogme agtigt, men alligevel et lille håb fra min side. En af mine personlige svagheder er netop "ikke bare at gøre som andre?" - sorry ;-)

Derudover er ovenstående udfordring opstået, idet at siden med de mange <a href> tags ikke er skabt af mig og at jeg ønsker at 'snage' i hvilke link's brugeren finder interessante (jeg har desværre ikke adgang til webloggen).

Du skriver at jeg opbygger en ganske skrøbelig side og at mine JS-kald vil dø hvis jeg ændre med f.eks. document.body.innerHTML += ''; - sikres det ikke med aElms = document.getElementsByTagName("A"); ? Kan du give mig et mere konkret eksempel på document.body.innerHTML += ''; ?

Ovenstående problemstilling/læring mener jeg kan overføres til andre problemstillinger/løsningsscope (DOM, OOP), f.eks. at 'overvåge' anden adfærd fra brugeren eller i test situationer.

Skriv endelig tilbage med flere betragtninger, jeg elsker disse faglige kommentarer - jeg suger det hele til mig. Denne læring finder jeg mindst lige så vigtig som selve kodningen. mere, mere ...
Avatar billede skovenborg Nybegynder
29. september 2004 - 23:59 #10
lige en lille rettelse hvis du vil have en alertbox, som viser url'en. Det du havde skrevet ville nemlig kun virke i Internet Explorer som bruger srcElement som henviser til elementet som er klikket på, mens man i bla. mozilla bruger target. Så dit script bør se sådan ud:
function foo(e) {
        // e = event object
        if (e.target) {
            alert(e.target.href);
        }
        else if (e.srcElement) {
            alert(e.srcElement.href);
            e.srcElement.click();
        }
  }
Avatar billede olebole Juniormester
13. oktober 2004 - 14:48 #11
skovenborg >> det var det, jeg mente med kommentaren i: 28/09-2004 00:50:02  ;o)
Avatar billede gertnissen Nybegynder
05. december 2004 - 23:54 #12
Skulle vi ikke lukke denne, med et par svar fra jer ?
Avatar billede skovenborg Nybegynder
06. december 2004 - 00:07 #13
så er det dine denne gang ole :-)
Avatar billede gertnissen Nybegynder
06. december 2004 - 00:18 #14
Skovenborg >> Din løsning var ellers præcis det jeg søgte.
Avatar billede skovenborg Nybegynder
06. december 2004 - 19:07 #15
hmm, okay - det var mere fra et tidligere spørgsmål. Men så deler vi bare - så passer pengene :-)
Avatar billede gertnissen Nybegynder
08. december 2004 - 20:49 #16
ok skovenborg, olebole kom ikke forbi - så du løber med alle 30 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