2011-12-19 15 views
13

Questa è una domanda strana. Abbiamo alcuni link di produzione sulla nostra intranet. Qualche rouge javascript sta restituendo un "falso" su tutti i link sulla nostra homepage intranet.JQuery: rimuovere gli eventi "OnClick" dai tag "a"

Non abbiamo accesso all'origine per ricostruire il controllo e correggere questo javascript.

Così come un cerotto temporaneo voglio spostare tutti gli eventi "onclick" sui collegamenti utilizzando jQuery

I collegamenti in questo momento sono come questo:

<a href="https://www.mysite.com/" onclick="AddHit('Header: mysite.com', 'http://www.mysite.com'); return false;" title="Mysite Home">www.Mysite.com</a> 

voglio scrivere un po ' jquery per ottenere il codice "onclick = 'AddHit ...".

+0

http://stackoverflow.com/questions/209029/best-way-to -remove-an-event-handler-in-jquery –

risposta

28

Si può provare questo:

$("a").removeAttr("onclick"); 

Modifica Aggiornamento risposta sulla base dei commenti e jquery Docs:

Nota: La rimozione di un gestore di linea evento onclick utilizzando .removeAttr() non raggiunge l'effetto desiderato in Internet Explorer 6, 7 o 8. Per evitare potenziali problemi, utilizzare .prop() invece

modo migliore per farlo:

$("a").prop("onclick", null); 
+0

Ancora meglio: $ ('... ') prop (' onclick', null) .OFF ('click');. Controllare http://stackoverflow.com/a/1687805/3063226 – Heitor

+0

Sembra che funziona benissimo anche senza .OFF ('click'), .prop ('onclick', null) è sufficiente almeno per IE11. –

7

rimuovere l'attributo da tutti i link che l'hanno:

$('a[onclick]').removeAttr('onclick'); 
-1

Utilizzare il metodo .unbind() o off() per sbarazzarsi di questo.

+0

Credo che rimuoverà i gestori di eventi aggiunti tramite jQuery o addEventListener() ma non un gestore on-line in-click. - Jasper – Foreever

2

Si può fare qualcosa di simile;

$('a[onclick]').removeAttr('onclick'); 
0

non testato, ma penso che questo dovrebbe funzionare:

$(document).ready(function(){ 
    $('a').removeAttr("OnClick"); 
}); 

Maggiori informazioni: http://api.jquery.com/removeAttr/

+3

Dalla stessa pagina: "La rimozione di un gestore di eventi inline' onclick' usando '.removeAttr()' non ottiene l'effetto desiderato in Internet Explorer 6, 7 o 8. Per evitare potenziali problemi, usa '.prop() 'invece:' $ element.prop ("onclick", null); '" – WynandB

2
$(function(){ 
    $('a[onclick*="AddHit"]').removeAttr('onclick'); 
} 

Questo eliminerà tutti loro, ma si vuole fare in modo che don rimuoverlo dai collegamenti indesiderati. Un sacco di cose si aggancia all'attributo onclick, se hai una classe che puoi verificare prima di rimuovere o il contenuto di onclick, sarebbe meglio. Oserei osservare l'intero sito smettere di funzionare perché JS non è stato chiamato. Questo rimuoverà qualsiasi onclick con la funzione AddHit in onclick per mantenerti più sicuro.

2

Ciò rimuove l'attributo onclick per tutti i collegamenti che ha un valore onclick che inizia con "AddHit(" (lasciando gli altri collegamenti non toccati).

$('a[onclick^="AddHit("]').removeAttr("onclick"); 
3

Secondo la documentazione JQuery si dovrebbe usare .prop() per rimuovere un inline onclick, in quanto ciò consente di evitare problemi in Internet Explorer 6, 7 o 8.

provare questo

$element.prop("onclick", null); 

avevo bisogno di togliere l'onclick di un tag dopo il primo clic: ecco quello che ho fatto:

onclick="$(this).prop('onclick', null);" 

Speranza che aiuta

+2

Finora questa è l'unica risposta corretta. Usando jQuery, né '.removeAttr()' né '.unbind()' rimuoveranno in modo sicuro un gestore di eventi 'onclick' in linea in alcune versioni di Internet Explorer. Vedi ['.removeAttr()'] (http://api.jquery.com/removeAttr) – WynandB

0

tenere questo in mente, se il vostro 'onclick' attributo è in linea e in un MODAL come (bootstrap)

come Thi s: (in modal)

<a id="myDiv" href="#" onclick="doSomething();">Click here !</a> 

-> Non parlare al tag <body>!

in jQuery (con corpo in primo selettore):

$('body #myDiv').prop('onclick', null); 

Ho cercato per un paio d'ore ...

Problemi correlati