2016-10-05 2 views
-1

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

<div>1 
    <div>2 
     <div>3 
      <div>4 
       <div>5</div> 
      </div> 
     </div> 
    </div> 
</div> 

Если у меня есть слушатель событий на каждой части, но нажмите <div>5</div> почему пузырь событие до div4, div3, div2 (и т.д.) 's слушателей событий?

EDIT: Я не рассматриваю это как дубликат «что это событие пузыриться», потому что это спрашивает, почему не то, что

+1

Если у вас есть слушатель событий на ''

5
только вы не испытывали никаких пузырьков. – Bergi

+0

Хорошо, представьте себе, что второй 'div' представляет собой кнопку, а внутренние - это только элементы внутри (например, удерживая значок, может быть, текст). Когда пользователь щелкает в любом месте внутри, вы хотите обработать кнопку нажатой, правильно? Таким образом, вы можете просто атаковать обработчик кликов там, а не только один элемент_ под ним. – vlaz

+1

http://stackoverflow.com/questions/4616694/what-is-event-bubbling-and-capturing#answer-4616720 – adeneo

ответ

1

Ваше заявление неверно. The default for simple events is not to bubble:

запуская простое мероприятие под названием е означает, что trusted событие с названием х, который не делает пузырь (за исключением случаев, указано) и не отменяемое (за исключением случаев,) и , который использует интерфейс Event, должен быть создан и dispatched по заданной цели.

Таким образом, события, связанные с HTML, которые пузыряют это, потому что спецификация явно говорит так, по-видимому, потому что это имеет больше смысла таким образом.

Некоторых события, которые пузырь:

Некоторые события, которые не пузырь:

2

Если вы спрашиваете, почему это поведение по умолчанию, то ответ потому, что the language specification says so (курсив мой):

прослушиватель событий состоит из следующих полей:

  • [...]
  • захвата (булево, изначально ложно)
  • [...]

Когда событие отправляется к объекту, который участвует в дереве (например, элемент), он может также получать прослушиватели событий на предках этого объекта. Сначала вызываются все прослушиватели событий предка объекта, чья переменная захвата установлена ​​в true, в порядке дерева. Во-вторых, вызываются собственные вызовы событий объекта. И, наконец, и только если значение атрибута пузырьков события истинно, вызовы событий предка объекта снова вызываются, но теперь в обратном порядке дерева.

Если вы спрашиваете, почему спецификация была определена таким образом, вы можете спросить себя:
Если вы нажали на div5, вы также нажали на div4 или нет?
Это в конечном счете, зависит от точки зрения, но для меня ответ да, то как на мой первоначальный комментарий:

Если вы были в Женеве, вы были в Швейцарии, а также.

+0

Это вместе с замечанием Берги выше удовлетворило мой вопрос. Благодарю. –

+0

Событие пузыря не зависит от того, есть ли у вас слушатели для фазы пузыря или нет. – Oriol

 Смежные вопросы

  • Нет связанных вопросов^_^