Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Лучший способ получить оригинальную цель

Автор вопроса: Alan StormОтветов: 5

Что такое 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;}
});

который работает, но я не доволен обнюхиванием двухстрочных функций. Есть ли способ лучше?

  • Наткнулся на этот старый вопрос, задаваясь вопросом, почему этот ответ набрал всего одну треть голосов, принятых ответ кажется мне очень-очень лучше. Jonathan 30.04.2014

javascripteventsdelegatesjquerydom

Ответы

Ответ 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);
});

Ответ 5 · spbala

в обычном Javascript var t = (e.originalTarget)?e.originalTarget:e.srcElement; должно быть достаточно, чтобы прочитать его во всех браузерах.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы