stopPropagation本机事件与javascript事件
我在这里回答了一个问题,我无意中发现了一个奇怪的行为。 它工作得很好。我正在添加事件处理程序,当我单击图像时stopPropagation本机事件与javascript事件,javascript,jquery,event-handling,Javascript,Jquery,Event Handling,我在这里回答了一个问题,我无意中发现了一个奇怪的行为。 它工作得很好。我正在添加事件处理程序,当我单击图像时 警报(2)而不触发链接处理程序警报(1)。奇怪的是,如果我删除 preventDefault,警报(1)仍然不会触发,但会跟随链接。 为什么StopRopagation会阻止处理程序冒泡事件,但它需要preventDefault才能不跟随链接 这纯粹是出于教育原因。我只是想知道发生了什么 //请在回答之前查看演示。我有两个不同元素的处理程序。 尽管stopPropagation阻止父元
警报(2)
而不触发链接处理程序警报(1)
。奇怪的是,如果我删除
preventDefault,警报(1)
仍然不会触发,但会跟随链接。
为什么StopRopagation会阻止处理程序冒泡事件,但它需要preventDefault才能不跟随链接
这纯粹是出于教育原因。我只是想知道发生了什么
//请在回答之前查看演示。我有两个不同元素的处理程序。
尽管stopPropagation阻止父元素的处理程序启动,但它并不阻止它跟随链接。但是停止播放,不阻止事件冒泡吗?它不会使父元素的事件无效吗
//为什么处理程序警报(1)的事件为空,而链接的以下事件则为空
为什么stopPropagation会阻止处理器冒泡呢
事件,但它需要默认值才能不跟随链接
嗯,你解释得很好
正在遵循链接的默认行为。阻止默认值就是阻止它被遵循
传播行为是向父级冒泡的事件,阻止传播会停止向父级冒泡。这与跟踪链接不同,因为跟踪链接与链接本身相关,而不是连接到其父链接,因此,它仍然存在
返回false代码>如果我没记错的话,告诉jQuery两者都做
更新:
我看到您将处理程序与以下链接区分开来,基于此,我认为这是您的答案:
为什么stopPropagation会阻止处理器冒泡呢
事件,但它需要默认值才能不跟随链接
嗯,你解释得很好
正在遵循链接的默认行为。阻止默认值就是阻止它被遵循
传播行为是向父级冒泡的事件,阻止传播会停止向父级冒泡。这与跟踪链接不同,因为跟踪链接与链接本身相关,而不是连接到其父链接,因此,它仍然存在
返回false代码>如果我没记错的话,告诉jQuery两者都做
更新:
我看到您将处理程序与以下链接区分开来,基于此,我认为这是您的答案:
Javascript中的所有事件在与之交互的最外层元素上触发,然后在其祖先中的每个元素上再次触发,直到它到达主体。这样,事件首先在img
上触发,然后在a
上再次触发,因为img
位于a
内
如果不需要这种行为,这就是为什么要使用stopPropagation
来防止它在链中冒泡。在jQuery中,很容易检查是什么元素引发了事件,因此在某些情况下可以使用忽略它
当触发单击事件时,基本上有两条脉络:Javascript事件和本机事件。如果本机事件不是preventDefault()
或return false
的某个地方,它将触发,而不管任何stopPropagation()
Javascript中的所有事件都会触发与之交互的最外层元素,然后再次触发其祖先中的每个元素,直到它到达主体。这样,事件首先在img
上触发,然后在a
上再次触发,因为img
位于a
内
如果不需要这种行为,这就是为什么要使用stopPropagation
来防止它在链中冒泡。在jQuery中,很容易检查是什么元素引发了事件,因此在某些情况下可以使用忽略它
当触发单击事件时,基本上有两条脉络:Javascript事件和本机事件。如果本机事件不是preventDefault()
或return false
的某个地方,它将被触发,而不管任何stopPropagation()
否,我已经读过这篇文章。实际上我把它贴在了我所说的答案上。请看演示。我认为这个问题很好地回答了您的问题preventDefault
和stopPropagation
执行不同的操作preventDefault
停止浏览器的操作,其中,stopPropegation
阻止事件跨越。是的,我同意,但是,你说“stopPropegation阻止事件跨越”,那么为什么它到达链接标签并跟随链接?嗯,它没有?如果你(在左上角小而破碎。你只会看到2
,而不会看到1
。我没有说它会。我知道我的示例会做什么,这就是为什么它困扰我。为什么它会跟随链接,而它没有发出警报(1)?它的工作原理与alert相同,但与下面的链接不同否,我读过这篇文章。我实际上将它粘贴在了我所说的答案上。请看演示。我认为这个问题很好地回答了您的问题。preventDefault
和stopPropagation
做不同的事情。preventDefault
停止浏览器的操作,其中,stopPropegation
阻止事件跨越。是的,我同意,但是,你说“stopPropegation阻止事件跨越”,那么为什么它到达链接标签并跟随链接?嗯,它没有?如果你(左上角小而破碎。你只能看到2
,而看不到1
。我没说它有。我知道我的例子有什么作用,这就是为什么它困扰我。为什么
if (e.target == this) {
// run code only when this element is the originator of the event
}