2009-06-19 10 views
23

Il mio obiettivo è modificare l'attributo "onclick" di un collegamento. Posso farlo con successo, ma il collegamento risultante non funziona in ie8. Funziona in ff3.Come impostare l'attributo di OnClick con il valore contenente la funzione in ie8?

Ad esempio, questo funziona in firefox3, ma non in ie8. Perché???

<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

Qual è la linea "javascript: alert ('Ciao mondo');" tutto su? – Hugoware

+0

qual è l'idea nel non definire l'attributo "type" del tag script e usare javascript come una dichiarazione di classe o qualcosa del genere? – backslash17

+0

fammi correggere ... – edt

risposta

50

Non è necessario utilizzare setAttribute per questo - funziona Questo codice (IE8 anche)

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

perché metterlo in una chiusura? non c'è motivo per cui io possa vedere –

+0

Perché scrivere una funzione separata per l'avviso ('ciao mondo')? :) - Dipende da cosa stai facendo, una chiusura sarebbe meglio IMO se non hai intenzione di chiamarla da altri posti. – Hugoware

+5

in tal caso, non è necessario per la funzione o la chiusura. solo document.getElementById ("qualcosa"). onclick = function() {alert ('hello'); }; senza nessuno degli altri –

7

la soluzione migliore è quella di utilizzare un framework JavaScript come jQuery o prototipo, ma, in mancanza di questo, si dovrebbe utilizzare:

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

edit:

anche, la funzione è un po ' off. dovrebbe essere

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

Questo funziona, ma sto cercando di ignorare un evento onclick in cui l'attributo onclick e il valore vengono aggiunti al tag di ancoraggio. Non ho accesso alla modifica del tag di ancoraggio, quindi ho bisogno di farlo con JavaScirpt. – edt

+1

addEventListener e attachEvent sono modi molto migliori di aggiungere eventi agli elementi DOM (inclusi i tag di ancoraggio). sono metodi non invadenti per aggiungere un numero arbitrario di eventi agli elementi, la proprietà onclick, al contrario, consente solo un evento ed è molto più incline agli errori (ad esempio altri script che modificano la proprietà) –

5

È anche possibile impostare onclick per chiamare la funzione come questa:

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

In questo modo, è possibile passare anche gli argomenti. .....

1

È inoltre possibile utilizzare:

element.addEventListener("click", function(){ 
    // call execute function here... 
}, false); 
Problemi correlati