Вопрос по dom, html, events, internet-explorer – Как получить доступ к Event.target в IE9?

10

Объектная модель HTML DOM определяетEvent объектсtarget property.

Глядя на MSDN, Microsoft документируетtarget property, Они также документируютsrcElement как псевдонимtarget из более ранних версий Internet Explorer:

The target property is similar to srcElement in Windows Internet Explorer 8 and earlier versions.

Итак, я нахожусь в Internet Explorer, сидя заclick Точка останова:

<div class="day" onclick="divClick(this)">

function divClick(sender)
{
   var divCell = sender;

И наF12 Tools консоль я могу попросить глобальныйevent объект:

>> event 
{
    actionURL : "",
    altKey : false,
    altLeft : false,
    behaviorCookie : 0,
    behaviorPart : 0,
    bookmarks : null,
    boundElements : {...},
    button : 0,
    buttonID : 0,
    cancelBubble : false
    ...
} 

И я могу попроситьevent.srcElement объект:

>> event.srcElement 
{
    align : "",
    noWrap : false,
    dataFld : "",
    dataFormatAs : "",
    dataSrc : "",
    currentStyle : {...},
    runtimeStyle : {...},
    accessKey : "",
    className : "header",
    contentEditable : "inherit"
    ...
} 

Ноevent.target пустой:

>> event.target 

И если яwatch event, здесь нетtarget имущество:

enter image description here

Так как мне получить доступ кtarget собственностьevent объект в Internet Explorer (9 (режим документа: стандарты IE9 (режим браузера: IE9)))?

Рассматривали ли вы возможность позволить библиотеке, такой как jQuery, сделать грязную работу за вас? ThiefMaster♦

Ваш Ответ

6   ответов
-2

использовать:

var target = (event.target !== undefined)? event.target.name : event.srcElement.tagName;

затем:

if ( target === 'A' || target === '...') {
    ...
}

ИЛИ ЖЕ: простое использование:

var target = event.srcElement.tagName;

проверено на Chrome 35 :)

Error: User Rate Limit ExceededIE9
1

Простой способ архивировать это с помощью:

var target = event.target || event.srcElement;
  • Avoid to use a ternary operator.

Это работает потому что:

  1. Test if event.target is a truthy which if does not exist in that browser will evaluate to false.
  2. If evaluates to false then it will move to the next operator which in this case is event.srcElement.

И с этим вы получите первое значение, которое присутствует в текущем браузере, где выполняется код.

0

Проблема заключалась не в том, что вы не использовалиaddEventListener() (потому что старая школа.onclick-присвоение тоже работает). Проблема заключалась в том, чтоdivClick получилthis (что равноeventobj.target), но вы хотите, чтобы весьeventobj.

В следующих двух случаях вы получите толькоeventobj.target под именемthis и у вас нет доступа к аргументам, передаваемым обработчику onclick.

<div id=xyz onclick="divClick(this);">
document.getElementById("xyz").onclick = function () { divClick(this); };

Вы получаете весьeventobj как обычный параметр со следующей строкой:

document.getElementById("xyz").onclick = divClick;

Вот как событие запускается в элементе xyz в IE9 + и других браузерах:

document.getElementById("xyz").onclick(eventobj)
4

Если вы хотите использоватьevent.target в IE9 вам нужно будет использоватьaddEventListener()-метод, чтобы назначить обработчик событий для элемента.

<div id="day" class="day"></div>

document.getElementById('day').addEventListener('click',divClick,false);

function divClick(e){
   alert(e.target);
   divCell=this;
   :
}

ВdivClick() вы можете сослатьсяday просто используя ключевое словоthis, аргументацияe содержит ссылку на сам объект события.

Кстати, в MSDN вы можете найти более подходящую IE-документацию длявеб-разработка вместо разработки Windows.

Error: User Rate Limit ExceededonclickError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
"IF you want to use event.target is IE9, you'll need to use addEventListener()"Error: User Rate Limit Exceededevent.targetError: User Rate Limit ExceededonclickError: User Rate Limit Exceeded Ian Boyd
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededEventError: User Rate Limit Exceeded.targetError: User Rate Limit Exceeded
2

Здесь идет мое исследование (проверено в IE9, IE10 и режимах браузера Edge на IE11, IE8, к сожалению, ломает jsFiddle). В режиме IE9 (IE11) event.target был доступен в качестве локальной переменной для функции, не знаю, отличается ли он от реального IE9.

Вы не можете получить доступevent в любом браузере со встроенной функцией. Проблема в том, что когда вы делаете

<element onclick="someFunc(this)">

и вы проходитеthis в качестве параметра,this === event.target (или srcElement), а именно[HTML Object]не[Event Object].

Таким образом, на практике это означает, что это:

<div id="foo" onclick="alert(this)"></div>

такой же как:

// note that onclick perfectly works, you don't necessarily need addEventListener
document.getElementById('foo').onclick = function(e) { alert(e.target) } //or
document.getElementById('foo').addEventListener('click', function(e) { alert(e.target) }, false);

Таким образом, вы получаете доступ к цели события либо непосредственно в качестве параметра, либо через javascript в качестве параметра объекта.target || srcElement имущество. Вы можете проверить результаты для себя здесь:http://jsfiddle.net/kevinvanlierde/tg6FP/2/

Note: В случае, если вы присоединяете inline, положение ваших сценариев имеет решающее значение (непосредственно перед закрытием тега body)
Note: В случае, если вы приложите в строке, учитывая, чтоevent.target является "корнем"; переданного объекта, вы не можете получить доступ к другим свойствам события, напримерevent.type.
Note: Будьте осторожны с режимом IE Developer. Я знаю, что он обманывает (например, неправильно отображает содержимое DOM в дереве элементов, пока вы не нажмете "Изменить как HTML")

12

event.target?

Вам нужно проверить это, назначить это переменной и использовать вместо этого ..

  var target = event.target ? event.target : event.srcElement;

может не хватать смысла ...

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededevent.targetError: User Rate Limit Exceededevent.targetError: User Rate Limit ExceededseeError: User Rate Limit Exceededevent.target. Ian Boyd

Похожие вопросы