Javascript 什么';添加';返回false';单击事件侦听器?
我在HTML页面中多次看到类似的链接:Javascript 什么';添加';返回false';单击事件侦听器?,javascript,html,Javascript,Html,我在HTML页面中多次看到类似的链接: <a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a> 那里的返回false有什么影响 而且,我通常不会在按钮中看到这一点 这是指定的地方吗?在w3.org的某些规范中?我相信它不会导致标准事件发生 在您的示例中,浏览器不会尝试转到#。从JavaScript事件中重新调整false通常会取消“默认”行为-对于链接,它会告诉浏览器不要跟随
<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
那里的返回false
有什么影响
而且,我通常不会在按钮中看到这一点
这是指定的地方吗?在w3.org的某些规范中?我相信它不会导致标准事件发生
在您的示例中,浏览器不会尝试转到#。从JavaScript事件中重新调整false通常会取消“默认”行为-对于链接,它会告诉浏览器不要跟随链接。返回false将阻止导航。否则,该位置将成为someFunc的返回值。返回false表示不执行默认操作,在
的情况下,默认操作将跟随链接。当您将false返回onclick时,href将被忽略 在onclick事件中使用return false会停止浏览器处理执行堆栈的其余部分,包括href属性中的链接
换句话说,添加return false将停止href的工作。在您的示例中,这正是您想要的
在按钮中,这是不必要的,因为onclick是它将要执行的全部内容——没有href可处理和转到。浏览器黑客:
返回false将在javascript运行后停止跟踪超链接。这对于优雅降级的不引人注目的javascript非常有用——例如,您可以有一个使用javascript打开全尺寸图像弹出窗口的缩略图。当关闭javascript或中键单击图像(在新选项卡中打开)时,这会忽略onClick事件,而通常只将图像作为全尺寸图像打开
如果未指定return false,则映像将启动弹出窗口并正常打开映像。有些人不使用return false,而是使用javascript作为href属性,但这意味着禁用javascript时链接将不起任何作用。事件处理程序的返回值决定是否也应发生默认浏览器行为。在单击链接的情况下,这将跟随链接,但差异在表单提交处理程序中最为明显,如果用户输入信息出错,您可以取消表单提交 我不相信有一个W3C规范。所有像这样的古老JavaScript接口都有一个昵称“DOM0”,而且大多数都是未指定的。阅读旧的Netscape 2文档可能会有些运气
实现此效果的现代方法是调用
事件.preventDefault()
,这在中有详细说明。这里有一个更强大的例程来取消所有浏览器中的默认行为和事件冒泡:
// Prevents event bubble up or any usage after this is called.
eventCancel = function (e)
{
if (!e)
if (window.event) e = window.event;
else return;
if (e.cancelBubble != null) e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
if (e.preventDefault) e.preventDefault();
if (window.event) e.returnValue = false;
if (e.cancel != null) e.cancel = true;
}
这将如何在事件处理程序中使用的示例:
// Handles the click event for each tab
Tabstrip.tabstripLinkElement_click = function (evt, context)
{
// Find the tabStrip element (we know it's the parent element of this link)
var tabstripElement = this.parentNode;
Tabstrip.showTabByLink(tabstripElement, this);
return eventCancel(evt);
}
您可以通过以下示例看到差异:
<a href="http://www.google.co.uk/" onclick="return (confirm('Follow this link?'))">Google</a>
单击“确定”返回true,并跟随链接。单击“取消”返回false,并且不跟随链接。如果禁用了javascript,链接将正常运行。我很惊讶没有人在mousedown上提到
onclick而不是onclick
。
onclick='return false'
未捕获浏览器的默认行为,导致mousedown
出现(有时是不需要的)文本选择,但是
onmousedown='returnfalse'
是的
换句话说,当我点击一个按钮时,它的文本有时会被意外选中,从而改变按钮的外观,这可能是不需要的。这是我们在这里试图防止的默认行为。但是,mousedown
事件是在click
之前注册的,因此,如果您仅在click
处理程序中阻止该行为,则不会影响mousedown
事件产生的不需要的选择。因此文本仍然被选中。但是,阻止mousedown
事件的默认设置将完成此任务
另请参见“return false”到底在做什么?
return false实际上在调用它时做了三件非常独立的事情:
event.preventDefault()李>
event.stopPropagation()李>
停止回调执行并在调用时立即返回
有关更多信息,请参阅
例如:
单击此链接时,返回false将取消浏览器的默认行为
<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
返回false
可防止页面被导航和窗口不必要地滚动到顶部或底部
onclick="return false"
我的HTML页面上有以下链接:
<a href = ""
onclick = "setBodyHtml ('new content'); return false; "
> click here </a>
当我单击该链接时,链接消失,文本显示在浏览器中
对“新内容”的更改
但是,如果我从我的链接中删除“false”,单击链接(似乎)什么也做不了。为什么呢
这是因为如果我不返回false,那么单击链接并显示其目标页面的默认行为不会被取消。但是,此处超链接的href为“”,因此它链接回同一当前页面。因此,页面被有效地刷新,似乎什么也没有发生
在后台,函数setBodyHtml()仍然会执行。它将其参数指定给body.innerHTML。但是,由于页面会立即刷新/重新加载,修改后的正文内容可能会在几毫秒内不可见,因此我不会看到它
这个例子说明了为什么有时使用“returnfalse”是有用的
我确实希望为链接分配一些href,以便它显示为链接,并显示为带下划线的文本。但我不希望点击链接就可以有效地重新加载页面。我希望取消默认的navigation=behavior,以及调用我的函数所引起的任何副作用。因此,我必须“重新开始”
function setBodyHtml (s)
{ document.body.innerHTML = s;
}
function checkForm() {
// return true to submit, return false to prevent submitting
}
<form onsubmit="return checkForm()">
...
</form>