2010-05-04 11 views
22

De acuerdo, me pregunto cómo desvincular un evento onclick en línea en jQuery. Uno pensaría que .unbind() funcionaría, pero no es así.Desvincular en línea enHaga clic en no trabajar en jQuery?

Para probar esto por sí mismo, jugar con el siguiente código HTML y 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> 

Como se puede ver, no vinculante no desenlazar el evento en línea onclick ... sin embargo, no desenlaza el evento click añadió con bind().

lo tanto, estoy preguntando si hay una manera de desvincular línea eventos onclick cortos de la siguiente manera:

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

, gracias

Respuesta

34

jQuery's unbind no funcionará en los atributos onclick - solo funciona para las funciones que se agregaron a través de bind y por lo tanto están disponibles en $(...).data('events'). Tienes que usar removeAttr para eliminar onclick.

Lea this question para obtener más información.

+3

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

4

unbind desenlaza controladores de eventos registrados en bind, no se asignan a través de las el onclick u otros atributos DOM0. A partir de los documentos:

Cualquier controlador que se ha unido con .bind() puede ser eliminado con .unbind().

Editar: se desvincula manipuladores Dom0 despejando el atributo correspondiente en el elemento. Tenía que buscar la forma jQuery de hacer eso: removeAttr.

Cuestiones relacionadas