2010-04-13 14 views
30

Esto parece engañosamente simple.¿Cómo se anula el evento onclick en línea?

¿Cómo anula el evento onclick en el siguiente código HTML mediante JavaScript?

<a id="sample" href="..." onclick="alert('hello world')" />...</a> 

Lo he intentado con jQuery, pero que no hice el truco:

$('#sample').attr('onclick','alert("done")') 

Supongamos que el HTML es pre-escrito y no se puede cambiar, aparte de la manipulación con JavaScript.

Respuesta

41

Prueba esto:

// Setting the DOM element's onclick to null removes 
// the inline click handler 
$("#sample")[0].onclick = null; 
$("#sample").click(function() { alert("done") }); 
+0

Eso no fue obvio, y funcionó. Gracias Andrew. ¿Por qué el [0]? –

+1

@Diodeus: los objetos jQuery, al igual que las colecciones DOM o las matrices, tienen índices numéricos para cada elemento contenido. '[0]' buscará el primer elemento coincidente del selector. –

+0

Supongo que estoy seleccionando por ID que sería único y nunca daría como resultado una matriz. A veces lo que parece lógico es ... equivocado. –

1

Probar:

document.getElementById("sample").onclick = $.noop; 

$.noop == function(){}; 

jQuery noop

+1

Esto no funcionó bien. –

+0

'$ (" # muestra ") [0] .onclick = null;' y 'document.getElementById (" muestra "). Onclick = $ .noop;' son casi idénticos. ¿Cómo puedes decir que esto no funcionó? –

+0

Probé esto y encontré que funciona para mis propósitos (no probé para ver si anula el atributo, pero probablemente sí) –

6
<a id="sample" href="..." onclick="alert('hello world'); return false;" />...</a> 

O

$('#sample').attr('onclick','alert("done"); return false;') 

A pesar de ser capaz de establecer el return false; ya sea directamente en el onclick o usando jQuery, no lo hace de hecho, se requiere jQuery para ser utilizado en absoluto. El beneficio es si por alguna razón su script jQuery lleva a 404, su código seguirá funcionando.

Encontré la respuesta here.

+0

+1 Esto es mejor que la respuesta que di. :-) –

+1

Devolver falso no es el problema, y ​​esto no funciona. –

+0

¡Oh bolas, creo que he entendido mal tu pregunta! Lo siento amigo: S –

4

Esto también se puede hacer sin jQuery:

document.getElementById("sample").setAttribute('onclick','alert("done")'); 
Cuestiones relacionadas