2009-03-19 18 views

Antwort

6

Es ist nicht nativ von jQuery unterstützt, aber Sie können Ihre eigenen Selektor hasEvent plugin schreiben:

jQuery.expr[":"].click = "jQuery(a).hasEvent('click');"; 

$("a:click").doStuff(); 

EDIT:

Es gibt auch die Event Bound Selector plugin, die vollständiger ist und arbeitet die aus Box, ist aber auch größer.

+0

Großartig. Ich frage mich, wie es funktioniert. – Vasil

0

Nein. Sie können über alle Elemente iterieren und prüfen, ob sie eine Ereignisbindung haben. Aber das wäre nicht sehr effizient, es sei denn, Sie haben eine Ahnung, welche Art von Elementen das Ereignis binden würde, so dass Sie die Suche einschränken können.

+0

ist es vielleicht nicht so schrecklich effizient ist, weil Ich vermute, Jquery macht eine Menge von Schleifen über alles für jede Abfrage – cobbal

0

Suche nach der Position:

button: function(elem){ 
     return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; 
    }, 
    input: function(elem){ 
     return /input|select|textarea|button/i.test(elem.nodeName); 
    }, 
    //init custom 
    ev: function(elem,i,match){ 
     var what = $(elem).hasEvent(match[3]); 
     var type = (typeof what); 
     return what !== null && type !== undefined; 
    } 
    //End custom 
}, 
setFilters: { 
    first: function(elem, i){ 
     return i === 0; 
    }, 
    last: function(elem, i, match, array){ 
     return i === array.length - 1; 
    }, 
    even: function(elem, i){ 
     return i % 2 === 0; 
    }, 

.....

gleichen Einsatz wie has()

ex:

$('form:ev(submit)'); 
$('input:ev(click)'); 
$('a:ev(click)');