假设我有以下链接:
<a href="#" onclick="alert('You clicked a link.');">Click Me!</a>
当单击此链接时,将弹出一条消息,并在页面URL末尾附加一个井号。这看起来不太美观,除了在URL本身中使用JavaScript之外,是否有其他方法可以避免它:
<a href="javascript:alert('You clicked a link.');">Click Me!</a>
假设我有以下链接:
<a href="#" onclick="alert('You clicked a link.');">Click Me!</a>
<a href="javascript:alert('You clicked a link.');">Click Me!</a>
您需要防止默认响应的发生。
传统的方法是从中返回false
:
<a href="#" onclick="alert('You clicked a link.'); return false;">Click Me!</a>
<a href="#" id="myLink">Click Me!</a>
<script type="text/javascript">
window.onload = function() {
document.getElementById('myLink').onclick = function(event) {
alert('You clicked a link.');
return false;
};
};
</script>
现在最好的方法是调用 event
属性的正确方法:
<a href="#" id="myLink">Click Me!</a>
<script type="text/javascript">
window.onload = function() {
document.getElementById('myLink').onclick = function(event) {
alert('You clicked a link.');
event.preventDefault(); // <---
};
};
</script>
最好用一个URI替换那个#
,以便于那些不使用JavaScript的人找到正确的页面。在某些司法管辖区,无障碍设计实际上是法律要求。
编辑 修复了IE浏览器的问题:
function f() {
document.getElementById('myLink').onclick = function(e) {
alert('You clicked a link.');
if (!e) {
var e = window.event;
}
// e.cancelBubble is supported by IE - this will kill the bubbling process.
e.cancelBubble = true;
e.returnValue = false;
// e.stopPropagation works only in Firefox.
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
};
window.onload = f;
return false
。<a href="" onclick="alert('You clicked a link.'); return false">Click Me!</a>
href=""
,它运行正常,也许你把它和完全省略 href
属性混淆了?(完全省略 href
属性确实会使元素不再成为超链接) - bradley.ayers
event.preventDefault()
。(c) 正如我所指出的,使用真实的URI是合法要求,也是对用户的明显帮助。 - Lightness Races in Orbitwindow.event
。 - qwertymk