当我想阻止其他事件处理程序在触发某个事件后执行时,我可以使用以下两种技术之一。我将在示例中使用jQuery,但这也适用于普通JS:
1.event.prpreventDefault()
$('a').click(function (e) {
// custom handling here
e.preventDefault();
});
2.返回false
$('a').click(function () {
// custom handling here
return false;
});
这两种停止事件传播的方法之间有什么显著的区别吗?
对我来说,返回false;与执行方法相比,它更简单、更短,并且可能更不容易出错。使用该方法,您必须记住正确的大小写、括号等。
此外,我必须在回调中定义第一个参数才能调用该方法。也许,我应该避免这样做,而是使用preventDefault,这是有原因的吗?更好的方法是什么?
正如你所称,这不是一个“JavaScript”问题;这是一个关于jQuery设计的问题。
jQuery和之前链接的John Resig引用(在karim79的消息中)似乎是对事件处理程序一般工作方式的误解。
事实:返回false的事件处理程序阻止该事件的默认操作。它不会停止事件传播。从Netscape Navigator的旧时代开始,事件处理程序就一直以这种方式工作。
返回false的事件处理程序内容属性和事件处理程序IDL属性将阻止该事件处理程序的默认操作。
jQuery中发生的情况与事件处理程序中发生的不同。DOM事件侦听器和MSIE“附加”事件完全不同。
有关进一步阅读,请参阅[[W3C DOM 2事件文档]][1]。
正如你所称,这不是一个“JavaScript”问题;这是一个关于jQuery设计的问题。
jQuery和之前链接的John Resig引用(在karim79的消息中)似乎是对事件处理程序一般工作方式的误解。
事实:返回false的事件处理程序阻止该事件的默认操作。它不会停止事件传播。从Netscape Navigator的旧时代开始,事件处理程序就一直以这种方式工作。
返回false的事件处理程序内容属性和事件处理程序IDL属性将阻止该事件处理程序的默认操作。
jQuery中发生的情况与事件处理程序中发生的不同。DOM事件侦听器和MSIE“附加”事件完全不同。
有关进一步阅读,请参阅[[W3C DOM 2事件文档]][1]。
基本上,通过这种方式,您可以将事情组合起来,因为jQuery是一个主要关注HTML元素的框架,您基本上可以防止出现默认情况,但同时,您也可以停止传播以产生气泡。
所以我们可以简单地说,jQuery中的return false等于:
return false为e.preventDefault AND e.stopPropagation
但也不要忘了这一切都在jQuery或DOM相关函数中,当您在元素上运行它时,基本上,它会阻止所有的触发,包括默认行为和事件传播。
基本上在开始使用return false之前;,首先了解e.preventDefault();和e.停止传播();如果你认为你同时需要这两者,那就用它吧。
所以基本上这段代码如下:
$('div').click(function () {
return false;
});
等于此代码:
$('div').click(function (event) {
event.preventDefault();
event.stopPropagation();
});