¿Hay alguna manera de verificar si existe un evento en jQuery? Estoy trabajando en un complemento que usa eventos personalizados con espacios de nombres, y me gustaría poder verificar si el evento está vinculado a un elemento o no.Compruebe si existe evento en el elemento
Respuesta
$('body').click(function(){ alert('test')})
var foo = $.data($('body').get(0), 'events').click
// you can query $.data(object, 'events') and get an object back, then see what events are attached to it.
$.each(foo, function(i,o) {
alert(i) // guid of the event
alert(o) // the function definition of the event handler
});
Puede inspeccionar alimentando la referencia del objeto (no el objeto jQuery sin embargo) a $ .data, y para el segundo argumento de alimentación 'eventos' y que devolverá un objeto poblada con todos los eventos tales como ' hacer clic'. Puede recorrer ese objeto y ver qué hace el controlador de eventos.
Me gustó mucho su primer ejemplo, los $ .data (elem, 'eventos ') proporciona mucha más información. –
lo agregué como comentario –
¿Por qué no solo usas $ ('body'). Data ('events')? – James
uso jQuery filtro de eventos
se puede utilizar de esta manera
$("a:Event(click)")
Hah, gracias, construí ese complemento después de recibir la respuesta de Meder hace meses. –
A partir de 1.8, este complemento ya no funciona –
Me encanta esto, publicando un plugin OP creado como respuesta a su pregunta :) – Andy
me escribió un plugin llamado hasEventListener, que hace exactamente eso.
Espero que esto ayude.
El problema es, ¿cómo funciona? He estado trabajando durante algunas horas, y aún no está claro. Solo quiero comprobar si hay un evento de clic y recuperar un booleano, no un objeto, pero la mayoría de los métodos que proporciona, al menos los ejemplos, son mucho más complicados. Curiosamente: http://www.codingjack.com/playground/jquick/#haseventlistener, pero no estoy usando jquick, pero me gusta esa simplicidad limpia. –
Es posible utilizar:
$("#foo").unbind('click');
para asegurarse de que todos los eventos de clic son unbinded, después adjuntar su evento
No ayuda si ha utilizado en vivo para registrar el evento. http://stackoverflow.com/questions/12755646/jquery-datatables-multiple-calls-to-event-handler-with-live-function –
La pregunta es comprobar si existe evento en el elemento y no cómo desvincular los eventos existentes ... – Avi
@Avi, sigue siendo una buena respuesta, porque en muchos casos la pregunta se realiza teniendo en cuenta el problema: "¿Cómo no registrar un controlador dos veces?" – hans
A continuación código le proporcionará todos los eventos de clic sobre dado de selección:
jQuery(selector).data('events').click
Puede iterar sobre él usando cada uno o por ej. compruebe la longitud para la validación como:
jQuery(selector).data('events').click.length
Pensé que ayudaría a alguien. :)
No funciona más en jQuery> = 1.8. Vea la respuesta de Tom Gerken para una solución de trabajo. – jbandi
Aquí es cómo comprobar si existe cualquier caso para un elemento
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script>
$(function() {
$("#textDiv").click(function() {
//Event Handling
});
var events = $._data(document.getElementById('textDiv'), "events");
var hasEvents = (events != null);
});
</script>
</head>
<body>
<div id="textDiv">Text</div>
</body>
</html>
Creo que puede simplificar esto usando: var eventBound = (events! = Null); –
Esta solución funciona con jQuery 1.8.0 más tarde. Muchas gracias Ton Gerken :) –
que terminé haciendo este
typeof ($('#mySelector').data('events').click) == "object"
he respondido a la pregunta similar aquí: hasHandlers() helper
Trabajar con jQuery> = v1.11.0
Este trabajo para mí muestra los objetos y el tipo de evento que ha ocurrido.
var foo = $._data($('body').get(0), 'events');
$.each(foo, function(i,o) {
console.log(i); // guide of the event
console.log(o); // the function definition of the event handler
});
- 1. C++ compruebe si el elemento existe en el conjunto
- 2. Cakephp: compruebe si existe elemento de vista
- 3. UIAutomation: compruebe si el elemento existe antes de tocar
- 4. Compruebe si existe tabla
- 5. jQuery: compruebe si existe imagen
- 6. Compruebe si el valor existe en dataTable?
- 7. compruebe si el archivo existe en php
- 8. Compruebe si el archivo existe en ksh
- 9. NSMutableArray compruebe si el objeto ya existe
- 10. Obtiene el elemento recién enfocado (si existe) del evento onBlur.
- 11. C compruebe si el archivo existe
- 12. Compruebe si existe el método jQuery
- 13. Hibernar: compruebe si existe el objeto
- 14. Boost PropertyTree: compruebe si existe el niño
- 15. Postgresql: compruebe si existe el esquema
- 16. BASH - Compruebe si existe PID
- 17. Compruebe si se admite el elemento html
- 18. Javascript: compruebe si el elemento ha cambiado
- 19. Compruebe si existe una entrada de formulario
- 20. Compruebe si existe un directorio en PHP
- 21. Compruebe si existe un valor en ArrayList
- 22. Compruebe si existe un nodo en h5py
- 23. Compruebe si existe un objeto en VBScript
- 24. VBA con Microsoft Access - Compruebe si existe el objeto
- 25. SharePoint: compruebe si el elemento existe en una lista, sobrecarga mínima
- 26. Compruebe si existe una opción en el elemento seleccionado sin JQuery?
- 27. Compruebe el valor si existe en la columna
- 28. Compruebe si el carácter existe en la codificación
- 29. Compruebe si existe un archivo en el servidor
- 30. compruebe si el objeto existe en Cloud Files (PHP API)
entonces, en 1.8, ¿todo esto está mal? –
@SkylarSaveland Método '$ .data (elemento," eventos ")' nunca fue oficial. Pero en jQuery 1.8.0 este método se salió a través de '$ ._ data (element," events ")'. leer más [aquí] (http://blog.jquery.com/2012/08/09/jquery-1-8-released/) – Anton