2010-10-02 12 views
11

Tengo algo de HTML con un atributo onclick. Quiero anular ese atributo usando jQuery. ¿Hay alguna forma de eliminar el controlador de clics mediante jQuery? Usando unbind doesn't work.¿Puedo eliminar manejadores de eventos en línea usando jQuery?

+0

Soy consciente de que, para un sitio grande que podría ser difícil de manejar, pero ¿no sería más fácil (y más ligera en términos de ancho de banda de código descargado) para utilizar el Bloc de notas/Textmate/Gedit (o cualquier otro editor de texto) para encontrar todas las instancias de 'onclick' (o onClick) y simplemente eliminarlas por completo. –

+0

@David - Estoy lidiando con la basura en línea generada por Rails 2. Una vez que haya subido a Rails 3 no tendré este problema, ya que han hecho todo el JavaScript discreto. – Skilldrick

+0

... No puedo descartar a Rails (nunca he jugado realmente con eso, aún) pero en respuesta a su generación de 'basura en línea' solo puedo decir * ewwwwww * ... –

Respuesta

19

Pruebe la función .removeAttr():

$(function() { 
    $('a').removeAttr('onclick'); 
}); 

jsfiddle demo.

Una vez que haya eliminado el atributo onclick, puede adjuntar su propio controlador de clics.

+0

¡Perfecto! Gracias. – Skilldrick

+0

Tengo js código en línea en una etiqueta onclick = "document.setLang {{lang.1}}. Submit(); return false;" enviando un formulario pero no puedo dejar de enviar el formulario como mencionas ... – ratata

8
$("#theElement")[0].onclick = function() { 
    whatever(); 
}; 
// -- or -- 
$("#theElement")[0].onclick = null; 

No es que jQuery haga desaparecer las funciones y propiedades DOM estándar. ;-)

+1

tienes razón, pero lo bueno de las funciones de jQuery es que se aplican a todos los elementos, por lo que puedo eliminar el onclick de todos los elementos coincidentes sin tener que para mirar por encima de ellos. – Skilldrick

+0

@Skilldrick: Técnicamente, 'removeAttr()' también es un bucle. Pero estoy de acuerdo en que es más conveniente que escribas el loop tú mismo. – Tomalak

0

Hay un plugin para ello, pero solo deberías hacer esto cuando realmente lo necesites. El complemento le da la opción de llamar a la función anterior o ignorarla por completo.

jQuery Override Plugin

$(divElementObj).override('onclick', 'click', function(...)); 
0

opciones dadas intentado, pero funcionó parcialmente mientras se quitaban uno, pero no todos.

En su lugar, intenté seguir a chaining as workaround. Estoy usando el ver 1.4.2.

jQuery(“selector”) 
    .removeAttr("onclick").removeAttr("onmouseout").removeAttr("onmouseover"); 
2

Como se cita en http://api.jquery.com/prop/ Extracción de un controlador de línea evento onclick usando .removeAttr() no lograr el efecto deseado en Internet Explorer 8, 9 y 11. Para evitar problemas potenciales, utilice .prop() en su lugar.

Así que esto se puede hacer como

$(function() { 
    $('a').prop('onclick', false); 
}); 
Cuestiones relacionadas