Heim > Fragen und Antworten > Hauptteil
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?
给我你的怀抱2017-06-14 10:53:11
你的矛盾是因为对捕获阶段的不正确理解。别被名字困扰了,捕获跟冒泡是同个层面的东西,一个自外向内,一个自内向外。所以事件中断是在传播过程中中断,而不是在传播之前。
大家讲道理2017-06-14 10:53:11
如果你说的是如何获取的。 我觉得答案在 JavaScript Event Loop
Links: https://developer.mozilla.org...
世界只因有你2017-06-14 10:53:11
这是因为,javascript是一种指令性语言,什么是指令语言呢?就是你编写的每一条javascript语句都是一条指令,通知浏览器去做某些事,比如,最简单的document.getElementById(),实际上也是通知浏览器去获取相关dom,而非javascript自己做的。事件处理也是如此。
黄舟2017-06-14 10:53:11
如果事件已经停止了传播,浏览器又是怎么知道这个事件发生的位置呢?
它不想知道。
它又是怎么知道一个事件已经发生了呢?
它也不知道。
如果它不知道一个事件已经发生了,又怎么会执行对应的事件处理程序呢?
它说它很懒。