提问人:RaYell 提问时间:8/31/2009 最后编辑:Brian Tompsett - 汤莱恩RaYell 更新时间:11/9/2022 访问量:934856
event.preventDefault() 与返回 false
event.preventDefault() vs. return false
问:
当我想阻止其他事件处理程序在触发某个事件后执行时,我可以使用以下两种技术之一。我将在示例中使用 jQuery,但这也适用于纯 JS:
1.event.preventDefault()
$('a').click(function (e) {
// custom handling here
e.preventDefault();
});
2.return false
$('a').click(function () {
// custom handling here
return false;
});
这两种停止事件传播的方法之间有什么显著区别吗?
对我来说,它比执行方法更简单、更短,而且可能更不容易出错。使用该方法,您必须记住正确的大小写、括号等。return false;
此外,我必须在回调中定义第一个参数才能调用该方法。也许,有一些原因让我应该避免这样做并改用?有什么更好的方法?preventDefault
答:
您可以在一个元素的事件上挂起许多函数。你怎么能确定那个会是最后一个开火的? 另一方面,肯定会只阻止元素的默认行为。onClick
false
preventDefault
评论
我认为
event.preventDefault()
是 W3C 指定的取消事件的方式。
您可以在 W3C 规范中阅读有关事件取消的内容。
此外,您不能在所有情况下都使用 return false。在 href 属性中给出 javascript 函数时,如果返回 false,则用户将被重定向到写入 false 字符串的页面。
评论
<a href="javascript:return false"
return false
在 jQuery 事件处理程序中,实际上与在传递的 jQuery.Event 对象上调用两者相同。e.preventDefault
e.stopPropagation
e.preventDefault()
将阻止默认事件的发生,将阻止事件冒泡,并将同时执行这两项操作。请注意,此行为不同于普通(非 jQuery)事件处理程序,在普通(非 jQuery)事件处理程序中,值得注意的是,它不会阻止事件冒泡。e.stopPropagation()
return false
return false
资料来源:John Resig
使用 event.preventDefault() 而不是 “return false” 来取消 href 点击有什么好处吗?
评论
return false
从 DOM2 处理程序 () 完全不执行任何操作(既不阻止默认值也不停止冒泡;从 Microsoft DOM2 式处理程序 (),它阻止默认值但不冒泡;从 DOM0 处理程序 (),它阻止默认值(前提是您在属性中包含 )但不冒泡;从 jQuery 事件处理程序中,它同时执行两者,因为这是 jQuery 的事情。详情和现场测试请点击此处addEventListener
attachEvent
onclick="return ..."
return
return false
<a href="#" onclick="return false">Test</a>
正如你所描述的那样,这不是一个“JavaScript”问题;这是一个关于jQuery设计的问题。
jQuery 和之前链接的 John Resig 引用(在 karim79 的消息中)似乎是对事件处理程序通常如何工作的根源误解。
事实:返回 false 的事件处理程序会阻止该事件的默认操作。它不会停止事件传播。自 Netscape Navigator 的旧时代以来,事件处理程序一直以这种方式工作。
返回 false 的事件处理程序内容属性和事件处理程序 IDL 属性会阻止该事件处理程序的默认操作。
jQuery 中发生的情况与事件处理程序中发生的情况不同。DOM 事件侦听器和 MSIE“附加”事件完全是另一回事。
如需进一步阅读,请参阅 [ [W3C DOM 2 事件文档]][1]。
评论
return false
event.preventDefault()
jQuery
根据我的经验,使用 event.preventDefault() 比使用 return false 至少有一个明显的优势。假设您正在捕获锚标记上的点击事件,否则,如果用户被导航离开当前页面,这将是一个大问题。如果单击处理程序使用 return false 来阻止浏览器导航,则解释器可能无法访问 return 语句,并且浏览器将继续执行锚标记的默认行为。
$('a').click(function (e) {
// custom handling here
// oops...runtime error...where oh where will the href take me?
return false;
});
使用 event.preventDefault() 的好处是,您可以将其添加为处理程序中的第一行,从而保证锚点的默认行为不会触发,无论是否到达函数的最后一行(例如运行时错误)。
$('a').click(function (e) {
e.preventDefault();
// custom handling here
// oops...runtime error, but at least the user isn't navigated away.
});
评论
一般来说,你的第一个选项()是要采取的选项,但你必须知道你所处的环境以及你的目标是什么。preventDefault()
Fuel Your Coding 有一篇关于返回 false
的好文章; vs event.preventDefault() vs event.stopPropagation() vs event.stopImmediatePropagation()。
评论
使用 jQuery 时,调用它时会做 3 件独立的事情:return false
event.preventDefault();
event.stopPropagation();
- 停止回调执行,并在调用时立即返回。
有关更多信息和示例,请参见 jQuery 事件:Stop (Mis)Using Return False。
评论
我认为最好的方法是使用,因为如果在处理程序中引发一些异常,那么 return 语句将被跳过,并且行为将与您想要的相反。event.preventDefault()
false
但是,如果您确定代码不会触发任何异常,则可以使用所需的任何方法。
如果您仍然想使用 return ,那么您可以将整个处理程序代码放在 try catch 块中,如下所示:false
$('a').click(function (e) {
try{
your code here.........
}
catch(e){}
return false;
});
根据我的经验,我的观点是,使用总是更好
event.preventDefault()
几乎
停止或阻止提交事件,只要我们需要,而不是工作正常。return false
event.preventDefault()
评论
preventDefault
是一些英语单词,我理解它“防止默认”。 是一些英语单词,我理解它“返回 false”,但我不知道为什么,直到我谷歌这个神秘的代码。还有奖金,我可以单独控制和.return false
stopPropagation
preventDefault
和之间的主要区别在于,下面的代码将不会被执行,并且您的代码将在此语句之后执行。return false
event.preventDefault()
return false
event.preventDefault()
当你编写 return false 时,它会在后台为你做以下事情。
* Stops callback execution and returns immediately when called.
* event.stopPropagation();
* event.preventDefault();
e.preventDefault();
它只是停止元素的默认操作。
实例示例:-
阻止超链接跟随 URL,阻止提交按钮提交表单。当你有许多事件处理程序,并且你只想防止默认事件发生,并且发生很多次时, 为此,我们需要在 function() 的顶部使用。
原因:-
使用的原因是因为在我们的代码中,代码中出了点问题,那么它将允许执行链接或表单以提交,或者允许执行或允许你需要做的任何操作。 &链接或提交按钮将被提交,并且仍然允许事件的进一步传播。e.preventDefault();
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="https://www.google.com" onclick="doSomethingElse()">Preventsss page from redirect</a>
<script type="text/javascript">
function doSomethingElse(){
console.log("This is Test...");
}
$("a").click(function(e){
e.preventDefault();
});
</script>
</body>
</html>
返回 False;
它只是停止 function() 的执行。
"return false;
“将结束整个进程的执行。
原因:-
使用的原因 return false;是你不想再在严格模式下执行该函数了。
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<a href="#" onclick="returnFalse();">Blah</a>
<script type="text/javascript">
function returnFalse(){
console.log("returns false without location redirection....")
return false;
location.href = "http://www.google.com/";
}
</script>
</body>
</html>
基本上,这种方式可以组合东西,因为jQuery是一个主要关注HTML元素的框架,你基本上阻止了默认元素,但与此同时,你停止了传播以冒泡。
所以我们可以简单地说,return false in 等于:jQuery
return false 是 e.preventDefault 和 e.stopPropagation
但也不要忘记它都是在jQuery或DOM相关的函数中,当你在元素上运行它时,基本上,它会阻止所有东西被触发,包括事件的默认行为和传播。
基本上在开始使用之前,首先要了解什么和做什么,然后如果您认为同时需要两者,那么只需使用它即可。return false;
e.preventDefault();
e.stopPropagation();
所以基本上这段代码如下:
$('div').click(function () {
return false;
});
等于以下代码:
$('div').click(function (event) {
event.preventDefault();
event.stopPropagation();
});
根据我的经验,event.stopPropagation() 主要用于 CSS 效果或动画作品,例如当您同时对卡片和按钮元素都有悬停效果时,当您将鼠标悬停在按钮上时,卡片和按钮的悬停效果都会被触发在这种情况下,您可以使用 event.stopPropagation() 停止冒泡动作,而 event.preventDefault() 用于防止浏览器动作的默认行为。例如,你有表单,但你只为提交操作定义了点击事件,如果用户通过按回车键提交表单,浏览器是由按键事件触发的,而不是你的点击事件,你应该使用 event.preventDefault() 来避免不适当的行为。我不知道返回假是什么意思;不好意思。如需更多说明,请访问此链接并尝试使用第 #33 行 https://www.codecademy.com/courses/introduction-to-javascript/lessons/requests-i/exercises/xhr-get-request-iv
preventDefault()
并且是防止默认事件发生的不同方法。return false
例如,当用户点击外部链接时,我们应该显示一个确认模式,要求用户是否重定向到外部网站:
hyperlink.addEventListener('click', function (e) {
// Don't redirect the user to the link
e.preventDefault();
});
或者,我们不想在单击表单的提交按钮时提交表单。相反,我们首先要验证表单:
submitButton.addEventListener('click', function (e) {
// Don't submit the form when clicking a submit
e.preventDefault();
});
差异
return false
如果使用该方法处理事件,则对默认行为没有任何影响。仅当事件处理程序声明为元素的属性时,它才有效:addEventListener
hyperlink.addEventListener('click', function (e) {
// Does NOT work
return false;
});
// Work
hyperlink.onclick = function (e) {
return false;
};
- 根据规范,将取消除事件外的活动。
HTML 5
return false
mouseover
良好做法
建议使用该方法,而不是在事件处理程序中。因为后者仅适用于使用属性,该属性将删除同一事件的其他处理程序。
preventDefault
return false
onclick
如果您使用 jQuery 来管理事件,则可以在事件处理程序中使用:
return false
$(element).on('click', function (e) {
return false;
});
在返回 false 值之前,处理程序将执行其他操作。问题是,如果处理程序中发生任何运行时错误,我们将不会到达最后的返回 false 语句。
在这种情况下,将采用默认行为:
$(element).on('click', function (e) {
// Do something here, but if there's an error at runtime
// ...
return false;
});
我们可以通过在执行任何自定义处理程序之前使用该方法来避免这种情况:preventDefault
$(element).on('click', function (e) {
e.preventDefault();
// Do something here
// The default behavior is prevented regardless of errors at runtime
// ...
});
很高兴知道
如果您使用 jQuery 来管理事件,则行为将与 和 方法相同:return false
preventDefault()
stopPropagation()
$(element).on('click', function (e) {
// Prevent the default event from happening and
// prevent the event from bubbling up to the parent element
return false;
});
评论
preventDefault
stopImmediatePropagation