Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function($) {
- $.fn.hasEvent = function(type) {
- //get list of events on object
- var elements = $(this), selector, evts, evt;
- /*first, check for events set using $().bind('event') or $().<event>()*/
- for (var x = 0; x < elements.length; x++) {
- evts = $(elements).eq(x).data("events");
- evt = evts && evts[type] || []; //get the events of the given type
- for (var y = 0; y < evt.length; y++) {
- //if no selector exists then event is normal, not a live/delegate event
- if (!evt[y].selector) return true;
- }
- }
- /*if not found on the element check for .live() events which are attached to $(document)*/
- var events = jQuery.data(document, "events"), //get all events
- live = events && events.live || [], //get .live events or empty array
- selectors = [];
- //loop thru live object, collect selectors from objects where origType matches incoming type
- for (var z = 0; z < live.length; z++) {
- if ((live[z].origType === type)) {
- selectors.push(live[z].selector);
- }
- }
- //check if elements match the selectors from the event handlers
- //example $('#foo, #bar').is('.baz, .moo')
- if (elements.is(selectors.join(','))) return true;
- /*if still not found then check for .delegate() events
- loop thru elements and walk heirarchy checking each parent for events*/
- var pars;
- live = []; //reset
- selector = [];//reset
- for (var i = 0; i < elements.length; i++) {
- pars = $($(elements).eq(i)).parents(); //list of parent elements including self
- for (var j = 0; j < pars.length; j++) {
- events = $(pars[j]).data("events");
- live = events && events.live || []; //any live events on parent?
- for (var k = 0; k < live.length; k++) {
- //if parent has a live event with a type that matches our type then grap the selector
- if ((live[k].origType === type)) {
- selectors.push(live[k].selector);
- }
- }
- //var xxx = $(pars[j]).find(selectors.join(','));
- //if (elements.filter(xxx).length) return true;
- //console.log(elements, selectors)
- if (elements.is(selectors.join(','), pars[j])) return true;
- }
- }
- return false;
- }
- })(jQuery);
Add Comment
Please, Sign In to add comment