Búsqueda de sitios web

javascript - Comprobar si el evento existe en el elemento


¿Hay alguna manera de verificar si un evento existe en jQuery? Estoy trabajando en un complemento que usa eventos personalizados con espacio de nombres, y me gustaría poder verificar si el evento está enlazado a un elemento o no.

Respuesta #1

$('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
});

Puedes inspeccionar pasando la referencia del objeto (no el objeto jQuery) a $.data, y para el segundo argumento pasar 'events' y eso devolverá un objeto lleno de todos los eventos como 'click'. Puedes recorrer ese objeto y ver qué hace el manejador del evento.

Respuesta #2

Puedes usar:

$("#foo").unbind('click');

para asegurarse de que todos los eventos de clic estén desvinculados, luego adjunte su evento

Respuesta #3

Para comprobar los eventos en un elemento:

var events = $._data(element, "events")

Tenga en cuenta que esto solo funcionará con manejadores de eventos directos, si está utilizando $(document).on("nombre-del-evento", "jq-selector", function() { //lógica }), querrá ver la función getEvents al final de esta respuesta

Por ejemplo:

 var events = $._data(document.getElementById("myElemId"), "events")

o

 var events = $._data($("#myElemId")[0], "events")

Ejemplo completo:

<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>

Una forma más completa de verificar, que incluye escuchas dinámicas, instaladas con $ (document).on

function getEvents(element) {
    var elemEvents = $._data(element, "events");
    var allDocEvnts = $._data(document, "events");
    for(var evntType in allDocEvnts) {
        if(allDocEvnts.hasOwnProperty(evntType)) {
            var evts = allDocEvnts[evntType];
            for(var i = 0; i < evts.length; i++) {
                if($(element).is(evts[i].selector)) {
                    if(elemEvents == null) {
                        elemEvents = {};
                    }
                    if(!elemEvents.hasOwnProperty(evntType)) {
                        elemEvents[evntType] = [];
                    }
                    elemEvents[evntType].push(evts[i]);
                }
            }
        }
    }
    return elemEvents;
}

Uso de ejemplo:

getEvents($('#myElemId')[0])

Respuesta #4

usar filtro de eventos de jquery

puedes usarlo así

$("a:Event(click)")

Artículos relacionados