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 
}