Что такое jQuery и/или лучший способ получить исходную цель события в jQuery (или в javascript браузера в целом).
Я использовал что-то вроде этого
$('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;}
});
который работает, но я не доволен обнюхиванием двухстрочных функций. Есть ли способ лучше?
Ответ 1 · рейтинг 36 · eimaj
Вы можете сделать это в одной строке с помощью var originalElement = e.srcElement || e.originalTarget;, но это не очень похоже на JQuery ;-)
[Изменить: Но согласно http://docs.jquery.com/Events/jQuery.Event#event.target event.target может подойти...]
Ответ 2 · рейтинг 24 · Russ Cam
Я считаю, что e.target - это то, что вам нужно
$('body').bind('click', function(e){
e.target // the original target
e.target.id // the id of the original target
});
Если вы зайдете на веб-сайт jQuery в действии и загрузите исходный код, взгляните на
- Глава 4 - dom.2.propagation.html
который занимается распространением событий с помощью обработчиков пузырьков и захвата
Ответ 3 · рейтинг 22 · JussiR
Использование event.originalTarget может привести к ошибке "Отказано в доступе к свойству XYZ из контекста, отличного от Chrome", поэтому я бы рекомендовал использовать следующее:
var target = event.target || event.srcElement || event.originalTarget;
event.target работает в Firefox, Opera, Google Chrome и Safari.
Ответ 4 · рейтинг 2 · Joey T
В сочетании с Как обнаружить щелчок за пределами элемента? вот как вы можете перехватить вспомогательный виджет с аналогичной функцией скрытия при нажатии снаружи, чтобы предотвратить скрытие вашего собственного всплывающего окна вместе с ним; в этом случае мы перехватываем всплывающий виджет 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);
});