改变<a> tag?</a>行为的正确方法是什么?

时间:2008-10-08 20:55:53

标签: javascript ajax

我想通过onclick事件调用Javascript函数链接,而不是做任何事情(点击链接)。最好的方法是什么?我经常这样做:

<a href="#" onclick="foo()">Click</a>

但我不确定这是最好的方式,在这种情况下,它导航到page.html#,这对我正在做的事情并不好。

10 个答案:

答案 0 :(得分:18)

通常,您应始终使用后备链接以确保禁用JavaScript的客户端仍具有某些功能。这个概念被称为不引人注目的JavaScript。示例...假设您有以下搜索链接:

<a href="search.php" id="searchLink">Search</a>

您可以随时执行以下操作:

var link = document.getElementById('searchLink');

link.onclick = function() {
    try {
        // Do Stuff Here        
    } finally {
        return false;
    }
};

这样,禁用javascript的用户会被定向到search.php,而使用JavaScript的观看者会查看您的增强功能。

修改:正如评论#2中指出的nickf一样,如果您的处理程序中存在错误,则try和catch会阻止链接跟随。

答案 1 :(得分:6)

确保从onclick处理程序返回false。例如。 foo()应定义为:

function foo() {
  // ... do stuff
  return false;
}

有人在评论中指出,您可能需要稍微更改HTML以使其正常工作:

<a href="#" onclick="return foo()">Click</a>

或者只是把它放在HTML中:

<a href="#" onclick="foo(); return false;">Click</a>

答案 2 :(得分:3)

首先,有两种设置href的方法 - 您可以按照上面的说明使用href引用'#',或者您可以将href设置为引用“javascript:;”

其次,我总是建议将JavaScript保存在外部文件中,然后在那里管理事件处理程序。假设你想在页面加载时设置它,你可以这样做:

window.onload = {
    var myLink = document.getElementById('myLinkID');
    myLink.onclick = function(evt) {
        var evt = (evt) ? evt : ((event) ? event : null); // for cross-browser issues
        evt.preventDefault();
        evt.stopPropagation();
        foo();
    }
}

答案 3 :(得分:2)

href="#"的问题在于它会将浏览器抛到页面顶部。你可以这样做:

<a href="javascript:foo()">clicky</a>

虽然有更多人建议不要这样做(分层)。更好的方法,使用Prototype(就像在JQuery中一样简单,等等):

<a id="foo" href="#">clicky</a>

$('foo').observe('click', function(evt) { 
  foo();
  evt.stop(); // keeps it from navigating to the href url
}); 

答案 4 :(得分:0)

<a href="javascript: foo()" >Click</a>

答案 5 :(得分:0)

在调用foo()

后返回false

答案 6 :(得分:0)

很多混淆是围绕使用a-tags,因为它们跨浏览器支持:hover pseudo-css-selector ...

因此,使用a-tag通常很明显,因为它会根据鼠标悬停的不同阶段呈现不同的颜色......

有人会声称内置于:hover伪标签的功能根本不可用,因为W3C的目的是将动态html的三个部分中的内容,视觉呈现和功能分开; html,css和javascript。

但是现在我们仍然坚持使用它,暂时可以通过很多方式使用a-tags,因为它们以简单的方式完成任务,而且它是正确的跨浏览器! - )

但这意味着您有时必须禁用这些链接标记的默认行为,这意味着当更改当前内容没有意义时,您必须使onclick-event返回false。文件......

然而,可以使用解除默认行为的非常好的示例,例如可以提供具有某些属性的弹出窗口,即使用户已禁用javascript:

<a href="http://en.wikipedia.org/wiki/Css" target="_blank" onclick="window.open(this.href,'_blank','width=600,height=450,status=no');return false;">Show wikipedia css</a>

答案 7 :(得分:-1)

小心使用

<a href="#">Click</a>

因为它会引起令人讨厌的IE6 problem

我总是建议使用一个没有任何意义的锚。我喜欢用这个

<a href="#MAGIC">Click</a>

因为它让我发笑。

答案 8 :(得分:-2)

如果你包括

return false;

来自onclick事件,然后页面根本不会加载。例如:

<a href="#" onclick="foo();return false;">Click</a>

或者在函数本身中:

function foo() {
  // other stuff
  return false;
}

答案 9 :(得分:-2)

设置href属性以执行javascript。像这样:

<a href="javascript:foo()">Click</a>

这样你所有的a:悬停CSS样式都按预期工作。