官术网_书友最值得收藏!

Propagation

At this point, we should ask an important question—if an element and one of its ancestors have a handler on the same event, which handler will be fired first? Consider the following figure:

For example, we have Element2 as a child of Element1 and both have the onClick handler. When a user clicks on Element2, onClick on both Element2 and Element1 is triggered but the question is which one is triggered first. What should the event order be? Well, the answer, unfortunately, is that it depends entirely on the browser. When browsers first arrived, two opinions emerged, naturally, from Netscape and Microsoft.

Netscape decided that the first event triggered should be Element1's onClick. This event ordering is known as event capturing.

Microsoft decided that the first event triggered should be Element2's onClick. This event ordering is known as event bubbling.

These are two completely opposite views and implementations of how browsers handled events. To end this madness, World Wide Web Consortium (W3C) decided a wise middle path. In this model, an event is first captured until it reaches the target element and then bubbles up again. In this standard behavior, you can choose in which phase you want to register your event handler—either in the capturing or bubbling phase. If the last argument is true in addEventListener(), the event handler is set for the capturing phase, if it is false, the event handler is set for the bubbling phase.

There are times when you don't want the event to be raised by the parents if it was already raised by the child. You can call the stopPropagation() method on the event object to prevent handlers further up from receiving the event. Several events have a default action associated with them. For example, if you click on a URL link, you will be taken to the link's target. The JavaScript event handlers are called before the default behavior is performed. You can call the preventDefault() method on the event object to stop the default behavior from being triggered.

These are event basics when you are using plain JavaScript on a browser. There is a problem here. Browsers are notorious when it comes to defining event-handling behavior. We will look at jQuery's event handling. To make things easier to manage, jQuery always registers event handlers for the bubbling phase of the model. This means that the most specific elements will get the first opportunity to respond to any event.

主站蜘蛛池模板: 中牟县| 绥德县| 介休市| 将乐县| 红安县| 界首市| 绥棱县| 九台市| 开鲁县| 沽源县| 泽普县| 陇西县| 海丰县| 门头沟区| 伊宁市| 若尔盖县| 南京市| 花莲市| 洪湖市| 通道| 汤阴县| 彰化市| 韶关市| 包头市| 大冶市| 通渭县| 哈巴河县| 阿鲁科尔沁旗| 河东区| 郯城县| 碌曲县| 广西| 嵩明县| 遵化市| 昆山市| 利津县| 淮滨县| 庄浪县| 铁岭市| 涿鹿县| 墨脱县|