Answers:
事件处理程序的返回值确定默认浏览器行为是否也应发生。在单击链接的情况下,将在链接之后,但是区别最明显的是表单提交处理程序,如果用户输入信息有误,则可以取消表单提交。
我不相信对此有W3C规范。像这样的所有古代JavaScript接口都被赋予了“ DOM 0”的昵称,并且大多未指定。阅读旧的Netscape 2文档可能会有些运气。
实现此效果的现代方法是调用event.preventDefault()
,这是在DOM 2事件规范中指定的。
return false
方法,但我需要event.preventDefault
Chrome。
return false
现在可以使用该方法。它停止跟随img元素的onclick事件中的链接。
您可以通过以下示例看到不同之处:
<a href="http://www.google.co.uk/" onclick="return (confirm('Follow this link?'))">Google</a>
单击“确定”,返回true,然后单击链接。单击“取消”将返回false,并且不遵循链接。如果禁用了javascript,则正常跟随链接。
<button type="submit" onclick="return confirm('Do you really want to delete this?');">Delete</button>
这是在所有浏览器中取消默认行为和事件冒泡的更强大的例程:
// 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);
}
else
。可怕的编码风格。加上一些花括号,这样就不会造成歧义。
返回false实际上是在您调用它时做三件事:
请参阅jquery-events-stop-misusing-return-false更多信息,。
例如 :
在单击此链接时,返回false将取消浏览器的默认行为。
<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
e.preventDefault()
),但不会停止传播。参见:jsfiddle.net/18yq1783
从JavaScript事件中将false调整为false通常会取消“默认”行为-在链接的情况下,它告诉浏览器不要遵循该链接。
返回false将阻止导航。否则,该位置将成为someFunc的返回值
我很惊讶,没有人提到onmousedown
代替onclick
。的
onclick='return false'
无法捕获浏览器的默认行为,从而导致(有时是不必要的)文本选择发生,mousedown
但
onmousedown='return false'
做。
换句话说,当我单击按钮时,有时会意外选择其文本,从而改变按钮的外观,这可能是不希望的。这是我们试图在此处防止的默认行为。但是,该mousedown
事件是在之前注册的click
,因此,如果仅阻止click
处理程序中的该行为,则不会影响该mousedown
事件引起的不需要的选择。因此,文本仍然被选中。但是,防止该mousedown
事件的默认设置将起到作用。
我的HTML页面上有以下链接:
<a href = ""
onclick = "setBodyHtml ('new content'); return false; "
> click here </a>
函数setBodyHtml()定义为:
function setBodyHtml (s)
{ document.body.innerHTML = s;
}
当我单击链接时,链接消失,浏览器中显示的文本变为“新内容”。
但是,如果我从链接中删除“ false”,则单击链接不会(似乎)没有任何作用。这是为什么?
这是因为,如果我不返回false,则不会取消单击链接并显示其目标页面的默认行为。但是,此处的超链接的href为“”,因此它链接回SAME当前页面。因此,该页面实际上只是刷新了,似乎什么也没有发生。
在后台,函数setBodyHtml()仍会执行。它将其参数分配给body.innerHTML。但是,由于该页面会立即刷新/重新加载,因此修改后的正文内容可能不会在几毫秒内保持可见状态,因此我不会看到它。
此示例说明了为什么有时有时会使用“ return false”。
我确实想将SOME href分配给该链接,以便它显示为链接,并带有下划线的文本。但我不希望单击链接来有效地重新加载页面。我希望取消默认的navigation = behavior,并通过调用我的函数使之保持有效而引起任何副作用。因此,我必须“返回假”。
上面的示例是您在开发过程中会很快尝试的示例。对于生产而言,您更有可能在JavaScript中分配一个点击处理程序,然后调用preventDefault()。但是,为了快速尝试,上面的“ return false”可以解决问题。