Comment jQuery et/ou les meilleures pratiques permettent d’obtenir la cible initiale d’un événement dans jQuery (ou dans le javascript du navigateur en général).
J'ai utilisé quelque chose comme ça
$('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;}
});
ce qui fonctionne, mais je ne suis pas satisfait du reniflage d’entités à deux lignes. Y a-t-il un meilleur moyen?
Vous pouvez le faire en une seule ligne avec var originalElement = e.srcElement || e.originalTarget;
mais ce n’est pas vraiment JQuery-like ;-)
[Edit: Mais selon http://docs.jquery.com/Events/jQuery.Event#event.targetevent.target
pourrait faire l'affaire ...]
Je crois que e.target est ce dont vous avez besoin
$('body').bind('click', function(e){
e.target // the original target
e.target.id // the id of the original target
});
Si vous allez sur le site jQuery in Action et téléchargez le code source, jetez un coup d’œil à
qui traite de la propagation d'événements avec des gestionnaires de bulles et de capture
L'utilisation de event.originalTarget
peut provoquer "l'autorisation interdite d'accéder à la propriété 'XYZ' depuis un contexte non-chrome", je vous recommande donc d'utiliser les éléments suivants:
var target = event.target || event.srcElement || event.originalTarget;
event.target
fonctionne sur Firefox, Opera, Google Chrome et Safari.
En conjonction avec Comment détecter un clic en dehors d'un élément? voici comment vous pouvez piéger un sous-widget avec une fonctionnalité similaire de masquage lorsque vous cliquez sur l'extérieur pour empêcher votre propre pop-over de s'y cacher; dans ce cas, nous interceptons le widget contextuel Jquery UI Datepicker:
// not using jquery .one handler for this, so we can persist outside click later
$('html').click(function(evt) {
// just return if element has the datepicker as a parent
if ($(evt.target).parents('#ui-datepicker-div').length>0) return;
//toggle shut our widget pop-over
$('#mywidget').toggle();
// now, unbind this event since our widget is closed:
$(this).unbind(evt);
});
en Javascript normal, var t = (e.originalTarget)? e.originalTarget: e.srcElement; devrait être suffisant pour le lire sur tous les navigateurs.