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?
你的矛盾是因为对捕获阶段的不正确理解。别被名字困扰了,捕获跟冒泡是同个层面的东西,一个自外向内,一个自内向外。所以事件中断是在传播过程中中断,而不是在传播之前。
如果你说的是如何获取的。 我觉得答案在 JavaScript Event Loop
Links: https://developer.mozilla.org...
代码是浏览器帮你执行的,事件发生是浏览器检测到的,然后是浏览器帮你执行你制定的事件。
所以你问浏览器是怎么知道的?
这是因为,javascript是一种指令性语言,什么是指令语言呢?就是你编写的每一条javascript语句都是一条指令,通知浏览器去做某些事,比如,最简单的document.getElementById(),实际上也是通知浏览器去获取相关dom,而非javascript自己做的。事件处理也是如此。
点击执行
disableClickHandler
,阻止了事件传播,so.....它不想知道。
它也不知道。
它说它很懒。