他们似乎在做同样的事情…… 是现代的还是老的?还是不同的浏览器支持它们?
当我自己处理事件(没有框架)时,我总是检查两者并执行(如果存在)。(我也是return false,但我有一种感觉不适用于附带的事件node.addEventListener)。
return false
node.addEventListener
那么为什么两者都呢?我应该继续检查两者吗?还是实际上有区别?
(我知道,很多问题,但都是相同的=)
stopPropagation 阻止事件冒泡事件链。
stopPropagation
preventDefault 阻止浏览器对该事件执行默认操作。
preventDefault
$("#but").click(function (event) { event.preventDefault() }) $("#foo").click(function () { alert("parent click event fired!") }) <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="foo"> <button id="but">button</button> </div>
停止传播
$("#but").click(function (event) { event.stopPropagation() }) $("#foo").click(function () { alert("parent click event fired!") }) <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="foo"> <button id="but">button</button> </div>
使用stopPropagation,只有 button 的点击处理程序会被调用,而 div 的点击处理程序永远不会触发。
button
div
就像您使用一样preventDefault,只有浏览器的默认操作被停止,但div的单击处理程序仍然会触发。
以下是有关MDN中DOM事件属性和方法的一些文档:
event.cancelBubble
event.preventDefault()
event.returnValue
event.stopPropagation()
对于IE9和FF,您可以只使用preventDefault和stopPropagation。
为了支持IE8和更低版本,请替换stopPropagation为cancelBubble和替换preventDefault为returnValue
cancelBubble
returnValue