What's a jQuery like and/or best practices way of getting the original target of an event in jQuery (or in browser javascript in general).
I've been using something like this
$('body').bind('click', function(e){
//depending on the browser, either srcElement or
//originalTarget will be populated with the first
//element that intercepted the click before it bubbled up
var originalElement = e.srcElement;
if(!originalElement){originalElement=e.originalTarget;}
});
which works, but I'm not pleased with the two line feature sniffing. Is there a better way?
in normal Javascript, var t = (e.originalTarget)?e.originalTarget:e.srcElement; should be enough to read it across all browsers.
I believe e.target is what you require
If you go to the jQuery in Action website and download the source code, take a look at
which deals with event propagation with bubble and capture handlers
You can do it in one line with
var originalElement = e.srcElement || e.originalTarget;
but it ain't pretty JQuery-like ;-)[Edit: But according to http://docs.jquery.com/Events/jQuery.Event#event.target
event.target
might do...]Using
event.originalTarget
can cause "Permission denied to access property 'XYZ' from a non-chrome context" -error, so i'd recommend using following:event.target
works on Firefox, Opera, Google Chrome and Safari.In conjunction with How to detect a click outside an element? here is how you might trap a sub-widget with similar hide-when-clicked-outside functionality to prevent your own pop-over from hiding along with it; in this case, we are trapping the JQuery UI Datepicker pop-over widget: