向点击事件监听器添加"返回假"有什么作用?
很多次,我在HTML页面中都看到过这样的链接:
<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
那里的" return false"有什么作用?
另外,我通常不会在按钮中看到它。
在任何地方都指定了吗?在w3.org的某些规格中?
解决方案
我相信这不会导致标准事件的发生。
在示例中,浏览器将不会尝试转到#。
从JavaScript事件中将false调整为false通常会取消链接的"默认"行为,它告诉浏览器不要遵循该链接。
返回false将阻止导航。否则,该位置将成为someFunc的返回值
返回false表示不采取默认操作,在<a href>
的情况下,将遵循该链接。当我们向onclick返回false时,href将被忽略。
在onclick事件中使用return false会阻止浏览器处理其余的执行堆栈,包括跟踪href属性中的链接。
换句话说,添加return false会使href停止工作。在示例中,这正是我们想要的。
在按钮中,这是没有必要的,因为onclick就是它将执行的全部内容-无需处理和转到href。
浏览器黑客:
http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html
在JavaScript运行后,返回false将停止遵循超链接。这对于不雅观的javascript正常降级很有用,例如,我们可能拥有使用javascript打开全尺寸图像弹出窗口的缩略图。当关闭javascript或者单击鼠标中键(在新选项卡中打开)时,此操作将忽略onClick事件,而通常将其作为全尺寸图像打开。
如果未指定return false,则图像将同时启动弹出窗口并正常打开图像。某些人不是使用return false而是将javascript用作href属性,但这意味着禁用javascript时,链接将无效。
事件处理程序的返回值确定默认浏览器行为是否也应发生。在单击链接的情况下,将在该链接之后,但是在表单提交处理程序中最明显的区别是,如果用户输入信息有误,则可以取消表单提交。
我不相信对此有W3C规范。像这样的所有古代JavaScript接口都被赋予了" DOM 0"的昵称,并且大多未指定。阅读旧的Netscape 2文档可能会有些运气。
实现此效果的现代方法是调用event.preventDefault()
,这在DOM 2事件规范中进行了指定。
这是在所有浏览器中取消默认行为和事件冒泡的更强大的例程:
// 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,则正常跟随链接。