2009-06-19 15 views
23

Mi objetivo es cambiar el atributo "onclick" de un enlace. Puedo hacerlo con éxito, pero el enlace resultante no funciona en ie8. Funciona en ff3.Cómo establecer el atributo OnClick con el valor que contiene la función en ie8?

Por ejemplo, esto funciona en firefox3, pero no en ie8. ¿¿¿Por qué???

<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

¿Cuál es la línea de "javascript: alert ('hola mundo');" ¿todo sobre? – Hugoware

+0

¿cuál es la idea de no definir el atributo "tipo" de la etiqueta del script y usar javascript como una declaración de clase o algo como esto? – backslash17

+0

déjeme arreglar eso ... – edt

Respuesta

50

No es necesario utilizar setAttribute para eso - Este código funciona (IE8 también)

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

¿por qué poner eso en un cierre? no hay razón para que yo pueda ver. –

+0

¿Por qué escribir una función separada para alerta ('hello world')? :) - Depende de lo que estés haciendo, un cierre sería mejor IMO si no planeas llamarlo desde otros lugares. – Hugoware

+5

en ese caso, sin necesidad de la función o cierre. just document.getElementById ("algo"). onclick = function() {alert ('hello'); }; sin nada del resto –

7

la mejor opción es utilizar un marco de JavaScript como jQuery o prototipo, pero, en su defecto, se debe utilizar:

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

edición:

también, su función es un poco apagado. debe ser

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

Eso funciona, pero estoy tratando de anular un evento onclick donde el atributo y el valor onclick se agregan a la etiqueta de anclaje. No tengo acceso para cambiar la etiqueta de anclaje, así que tengo que hacerlo con JavaScirpt. – edt

+1

addEventListener y attachEvent son formas mucho mejores de agregar eventos a elementos DOM (incluidas etiquetas de anclaje). son métodos discretos para agregar un número arbitrario de eventos a elementos, la propiedad onclick, por el contrario, solo permite un evento y es mucho más propenso a errores (por ejemplo, otros scripts cambian la propiedad) –

5

También podría establecer onclick para llamar a su función como esta:

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

De esta manera, puede pasar argumentos también. .....

1

También puede utilizar:

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