2010-05-04 7 views
22

Okay, ich frage mich, wie man ein Inline-Onclick-Ereignis in jQuery lösen kann. Sie würden denken, .unbind() würde funktionieren, jedoch nicht.Inline-Verbindung trennen onClick funktioniert nicht in jQuery?

diese für sich selbst testen, mit dem folgenden HTML und JavaScript rumspielen:

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> 

Wie Sie sehen können, unbinding das Inline-onclick Ereignis nicht lösen ... aber macht es das Click-Ereignis hinzugefügt unbind mit bind().

Also, ich frage mich, ob es einen Weg gibt Inline-Onclick Ereignisse Sie folgendermaßen vorgehen kurz unbind:

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

Dank

Antwort

34

jQuery wird nicht auf onclick Attribute funktionieren - es funktioniert nur für Funktionen, die über bind hinzugefügt wurden und sind somit in $(...).data('events') verfügbar. Sie müssen removeAttr verwenden, um onclick zu entfernen.

Lesen Sie this question für weitere Informationen.

+3

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

4

unbind entbindet mit bind Event-Handler registriert, nicht diejenigen über zugewiesen die onclick oder andere DOM0-Attribute. Aus der Dokumentation:

Jeder Handler, der mit .bind() angebracht wurde, kann mit .unbind() entfernt werden.

bearbeiten: Sie entbinden Dom0-Handler, indem Sie auf das Element das entsprechende Attribut zu löschen. Ich musste den jQuery-Weg nachschlagen: removeAttr.