другое значение e.target в браузерах

Я хочу знать, почему Mozilla и Chrome имеют другое значение e.target. Я подготовил этот пример для вас.

https://jsfiddle.net/qdthnmdx/

В Mozilla e.target имеет значение:

<button type="button">

Но в Chrome это:

<span>Sometext</span>

Это какая-то ошибка?


person Stwosch    schedule 25.01.2017    source источник
comment
Покажите код в своем вопросе, а не в JS Fiddle. Stackoverflow предоставляет ту же функциональность в снипплетах. Последняя кнопка на панели инструментов, когда вы пишете свой вопрос.   -  person epascarello    schedule 25.01.2017
comment
Согласно спецификациям IIRC, события щелчка должны блокироваться элементом кнопки. FF будет следовать спецификациям, а не хрому. Это известное несоответствие между обоими UA, но я больше не могу найти, где я это читал... Кроме того, я могу вообще не помнить правильно.   -  person Kaiido    schedule 25.01.2017
comment
@epascarello, насчет обмана, хотя он определенно дает хорошее объяснение разницы между e.target и e.currentTarget, в элементе <button> также есть что-то особенное, так что FF не устанавливает target для внутренних элементов. Если мы заменим эту кнопку на <div>, то оба UA будут вести себя одинаково. В FF даже есть свойство explicitOriginalTarget, которое доходит до точного TextNode, по которому был нажат щелчок. В случае с <button> он по-прежнему останавливается на кнопке... Хотя не уверен, что стоит открывать заново...   -  person Kaiido    schedule 25.01.2017


Ответы (2)


Вы должны знать, что каждый браузер имеет свою собственную реализацию спецификации из JavaScript, здесь у меня есть другой результат вашего кода для вас, даже в Internet Explorer и Google Chrone существует разница:

IE 11: введите здесь описание изображения

Google Chrome: введите здесь описание изображения

Для получения дополнительной информации о спецификациях ECMA см.: http://www.ecma-international.org/publications/standards/Ecma-262.htm

person José Aquino    schedule 25.01.2017

event.target не отличается в браузерах.

event.target — это ссылка на объект, отправивший событие. поскольку вы прикрепляетесь к кнопке, она также прикрепляется к элементу span. поэтому, когда вы нажимаете на span, он показывает узел span, а на кнопке показывает кнопку, которая правильная, но это поведение более очевидно в Chrome, но не в Mozilla.

Если вы просто хотите прикрепить событие к элементу кнопки. вы можете рассмотреть следующие действия

Если вы хотите, чтобы кнопка отображалась как на кнопке, так и на клике диапазона, вы можете рассмотреть возможность использования здесь currentTarget.

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

Думаю, здесь это может быть полезно.

проверьте этот фрагмент

document.querySelector("button").addEventListener("click", function(e) {
		console.log(e.currentTarget.nodeName);
});
button {
  border: 1px solid;
  background: 0;
  padding:10px;
}
span {
  width: 100px;
  height: 100px;
  background-color: red;
}
<div id="id-div">
  <button type="button">
    <span>Sometext</span>
  </button>
</div>

person Geeky    schedule 25.01.2017
comment
Я предполагаю, что вы не нажали прямо на красное поле в хроме... нет предупреждения. Именно об этом говорит ОП. Нажатие на диапазон означает, что целью является диапазон, а не кнопка. - person epascarello; 25.01.2017