2009-06-19 9 views
23

Moim celem jest zmiana atrybutu "onclick" linku. Mogę to zrobić z powodzeniem, ale wynikowy link nie działa w ie8. Działa w trybie ff3.Jak ustawić atrybut OnClick z wartością zawierającą funkcję w ie8?

Na przykład działa to w firefox3, ale nie ie8. Czemu???

<p><a id="bar" href="#" onclick="temp()">click me</a></p> 

    <script> 

    doit = function(){ 
     alert('hello world!'); 
    } 
    foo = document.getElementById("bar"); 
    foo.setAttribute("onclick","javascript:doit();"); 

    </script> 
+3

Co to jest wiersz "javascript: alert ('Hello World');" wszystko o? – Hugoware

+0

jaki jest pomysł, aby nie definiować atrybutu "type" znacznika script i używać javascript jako deklaracji klasy lub czegoś podobnego? – backslash17

+0

Pozwól mi naprawić ... – edt

Odpowiedz

50

nie trzeba używać do tego setAttribute - Ten kod działa (IE8 również)

<div id="something" >Hello</div> 
<script type="text/javascript" > 
    (function() { 
     document.getElementById("something").onclick = function() { 
      alert('hello'); 
     }; 
    })(); 
</script> 
+2

dlaczego umieścić to w zamknięciu? nie widzę powodu. –

+0

Po co pisać osobną funkcję alarmu ("Witaj świecie")? :) - To zależy od tego, co robisz, zamknięcie byłoby lepsze IMO, jeśli nie planujesz dzwonić z innych miejsc. – Hugoware

+5

w takim przypadku nie ma potrzeby funkcji lub zamknięcia. just document.getElementById ("something"). onclick = function() {alert ('hello'); }; bez żadnej z pozostałych –

7

najlepiej jest użyć javascript ramy jak jQuery lub prototyp, ale w przeciwnym razie, należy użyć:

if (foo.addEventListener) 
    foo.addEventListener('click',doit,false); //everything else  
else if (foo.attachEvent) 
    foo.attachEvent('onclick',doit); //IE only 

edit:

również czynność jest trochę poza. powinno być

var doit = function(){ 
    alert('hello world!'); 
} 
+0

To działa, ale staram się przesłonić zdarzenia onclick, w którym atrybut i wartość onclick są dodawane do znacznika zakotwiczenia. Nie mam dostępu do zmiany znacznika zakotwiczenia, więc muszę to zrobić za pomocą JavaScirpt. – edt

+1

addEventListener i attachEvent to znacznie lepsze sposoby dodawania zdarzeń do elementów DOM (w tym znaczników zakotwiczonych). są dyskretnymi metodami dodawania dowolnej liczby zdarzeń do elementów, właściwość onclick, dla kontrastu, pozwala tylko na jedno zdarzenie i jest o wiele bardziej podatna na błędy (na przykład inne skrypty zmieniające właściwość), –

5

Można również ustawić onclick nazwać swoją funkcję tak:

foo.onclick = function() { callYourJSFunction(arg1, arg2); }; 

W ten sposób można również przekazywać argumenty. .....

1

Można również użyć:

element.addEventListener("click", function(){ 
    // call execute function here... 
}, false); 
Powiązane problemy