2010-05-04 11 views
22

Okay, mi sto chiedendo come smantellare un evento onclick in linea in jQuery. Si potrebbe pensare che .unbind() funzionerebbe, ma non è così.Non vincolante in linea onClick non funziona in jQuery?

Per testare questo per te, giocare con il seguente codice HTML e JavaScript:

function UnbindTest() { 
    $("#unbindTest").unbind('click'); 
} 

function BindTest() { 
    $("#unbindTest").bind('click', function() { alert("bound!"); }); 
} 


<button type="button" onclick="javascript:UnbindTest();">Unbind Test</button> 
<button type="button" onclick="javascript:BindTest();">Bind Test</button> 
<button type="button" onclick="javascript:alert('unbind me!');" id="unbindTest">Unbind Button</button> 

Come si può vedere, non vincolante non separare l'evento in linea onclick ... ma lo fa non associare l'evento click aggiunto con bind().

Quindi, mi chiedo se c'è un modo per sciogliere in linea eventi onclick brevi di fare la seguente:

$("#unbindTest").get(0).onclick = ""; 

Grazie

risposta

34

jQuery's unbind non funziona sugli attributi onclick - funziona solo per le funzioni aggiunte tramite bind e quindi disponibili in $(...).data('events'). Devi usare removeAttr per rimuovere onclick.

Leggi this question per ulteriori informazioni.

+3

snap ... $ ("# unbindTest"). RemoveAttr ('onclick'); lavorato. – Polaris878

4

unbind scioglie i gestori di eventi registrati bind, non quelli assegnati tramite lo onclick o altri attributi DOM0. Dalla documentazione:

Qualsiasi gestore che è stato attaccato con .bind() può essere rimosso con .unbind().

Modifica: È unbind gestori dom0 deselezionando l'attributo relativo sull'elemento. Ho dovuto andare a cercare il modo jQuery di farlo: removeAttr.