At the moment, I improve my ApToggleSwitch plugin and stumbled over a problem which leads to a nice jQuery function I want to share. Perhaps this code can be useful for you!
The problem was that I have to copy a special event from one html element to another – in my case I only wanted the
change
event to be copied. I found some posts how to copy events, but the solutions did not work
perfectly, so I had to merge the solutions presented in
this thread.
After that I transfered this code to a jQuery function that is applicable to jQuery object and added a filter
parameter, so only specific event types can be copied.
Code
$.fn.copyEvents = function( to, filter ) { var to = to.jquery ? to : jQuery(to); var filter = filter ? filter.split(" ") : null; var events = this[0].events || jQuery.data(this[0], "events") || jQuery._data(this[0], "events"); return this.each(function() { if (!to.length || !events) { return; } $.each(events, function(eventType, eventArray) { $.each(eventArray, function(index, event) { var eventToBind = event.namespace.length > 0 ? (event.type + '.' + event.namespace) : (event.type); if (filter && $.inArray(eventToBind, filter) == -1) { return true; } to.bind(eventToBind, event.data, event.handler); }); }); }); }
Usage
// Add some events to a element $('#element').click(function() { }); $('#element').dblclick(function() { }); $('#element').change(function() { }); // Default usage, copy *all* events from one element to another $('#element').copyEvents('#another-element'); // ... or you can copy only specific event types $('#element').copyEvents('#another-element', 'change click');
Thanks to antur123 and Brandon Aaron/yckart!