javascript - Woher weiß der Browser, dass ein Ereignis aufgetreten ist?
滿天的星座
滿天的星座 2017-06-14 10:51:11
0
6
752

In letzter Zeit beschäftige ich mich eingehend mit den Problemen im Zusammenhang mit der Erfassung und Sprudelung von Ereignissen:
Ich habe dieses Verständnis, ich weiß nicht, ob es richtig ist, Sie können einen Blick darauf werfen.

Der Ereignisausbreitungsmechanismus ist in drei Phasen unterteilt: Erfassungsphase, Erreichen des Zielstadiums und Blasenbildungsphase. Ich denke, der Zweck dieses Ausbreitungsmechanismus besteht darin, zu überwachen, ob ein Ereignis auftritt, welche Art von Ereignis es auftritt und wo das Ereignis auftritt. Die sogenannte Ereigniserfassung bedeutet, dass der Browser sucht, ob ein Ereignis aufgetreten ist. Die Verarbeitungszeit nach dem Eintreten des Ereignisses wird durch die Registrierung der Ereignisverarbeitungsfunktion und des letzten Parameters von addEventListener () erreicht.

Aber wenn ich dieser Idee folge, werde ich ein solches Problem haben.

Zum Beispiel habe ich einen Code wie diesen

    <p>
        <a id="btn" href="http://www.baidu.com/">
    button
        </a>
    </p>
    <script>
     var btn=document.getElementById('btn');
     var disableClickHandler =  function(event){
        console.log('1');
        event.preventDefault();
        event.stopPropagation();
     };
    document.removeEventListener('click',disableClickHandler,true);
    btn.onclick = function () {
        console.log('success');
    }
    </script>
    

Ich verwende die Capture-Methode, um Ereignisse zu verarbeiten und zu verhindern, dass sich das Ereignis in der Ereignisbehandlungsfunktion weiter ausbreitet. Das erscheint natürlich, aber meine Frage ist: Wenn sich das Ereignis nicht mehr ausbreitet, woher weiß der Browser dann, wo das Ereignis aufgetreten ist? Woher weiß es, dass ein Ereignis eingetreten ist? Wenn es nicht weiß, dass ein Ereignis eingetreten ist, wie kann es dann den entsprechenden Ereignishandler ausführen?

滿天的星座
滿天的星座

Antworte allen(6)
给我你的怀抱

你的矛盾是因为对捕获阶段的不正确理解。别被名字困扰了,捕获跟冒泡是同个层面的东西,一个自外向内,一个自内向外。所以事件中断是在传播过程中中断,而不是在传播之前。

大家讲道理

如果你说的是如何获取的。 我觉得答案在 JavaScript Event Loop

Links: https://developer.mozilla.org...

仅有的幸福

代码是浏览器帮你执行的,事件发生是浏览器检测到的,然后是浏览器帮你执行你制定的事件。

所以你问浏览器是怎么知道的?

世界只因有你

这是因为,javascript是一种指令性语言,什么是指令语言呢?就是你编写的每一条javascript语句都是一条指令,通知浏览器去做某些事,比如,最简单的document.getElementById(),实际上也是通知浏览器去获取相关dom,而非javascript自己做的。事件处理也是如此。

女神的闺蜜爱上我

点击执行disableClickHandler,阻止了事件传播,so.....

黄舟

如果事件已经停止了传播,浏览器又是怎么知道这个事件发生的位置呢?

它不想知道。

它又是怎么知道一个事件已经发生了呢?

它也不知道。

如果它不知道一个事件已经发生了,又怎么会执行对应的事件处理程序呢?

它说它很懒。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage