2010-10-02 11 views
11

Ho un codice HTML con un attributo onclick. Voglio sovrascrivere quell'attributo usando jQuery. C'è un modo per rimuovere il gestore di clic utilizzando jQuery? Utilizzando unbind doesn't work.Posso rimuovere gestori eventi in linea usando jQuery?

+0

mi rendo conto che, per un grande sito che potrebbe essere ingombrante, ma non sarebbe stato più facile (e più leggero in termini di larghezza di banda codice scaricato) per utilizzare Notepad/Textmate/Gedit (o qualsiasi altro editor di testo) per trovare tutte le istanze di "onclick" (o onClick) e rimuoverle interamente? –

+0

@David - Ho a che fare con lo schifo inline generato da Rails 2. Una volta caricato su Rails 3 non avrò questo problema, visto che hanno reso discreto tutto il codice JavaScript. – Skilldrick

+0

... Non posso ignorare Rails (non ci ho mai giocato davvero), ma in risposta alla sua generazione di 'crap inline' posso solo dire * ewwwwww * ... –

risposta

19

Prova la funzione .removeAttr():

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

jsfiddle demo.

Una volta eliminato l'attributo onclick, è possibile allegare il proprio gestore di clic.

+0

Perfetto! Grazie. – Skilldrick

+0

Ho codice js inline su un tag onclick = "document.setLang {{lang.1}}. Submit(); return false;" inviando un modulo ma non riesco a smettere di inviare il modulo come hai detto ... – ratata

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

Non è che jQuery farebbe scomparire le funzioni e le proprietà del DOM standard. ;-)

+1

hai ragione, ma la cosa bella delle funzioni jQuery è che si applicano a tutti gli elementi, quindi posso rimuovere onclick da tutti gli elementi corrispondenti senza avere sopra di loro. – Skilldrick

+0

@Skilldrick: Tecnicamente anche 'removeAttr()' è un loop. Ma sono d'accordo che è più comodo scrivere da solo il ciclo. – Tomalak

0

C'è un plugin per questo, ma si dovrebbe fare solo quando è veramente necessario. Il plugin ti dà la possibilità di chiamare la vecchia funzione o di ignorarla completamente.

jQuery Override Plugin

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

trovati mangiare provato ma lavorato parzialmente quanto rimossi uno ma non tutti.

Invece ho provato a seguire il concatenamento come soluzione alternativa. Sto usando ver 1.4.2.

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

Come citato in http://api.jquery.com/prop/ Rimozione di un gestore di linea evento onclick utilizzando .removeAttr() non ottenere l'effetto desiderato in Internet Explorer 8, 9 e 11. Per evitare possibili problemi, utilizzare .prop(), invece.

Quindi questo può essere fatto come

$(function() { 
    $('a').prop('onclick', false); 
}); 
Problemi correlati