提问人:sheats 提问时间:10/9/2008 最后编辑:Monolosheats 更新时间:6/10/2013 访问量:1250
更改 <a> 标记行为的正确方法是什么?
What is the right way to change the behavior of an <a> tag?
问:
我想通过 onclick 事件创建一个链接调用 Javascript 函数,而不是做任何其他事情(点击链接)。最好的方法是什么?我通常这样做:
<a href="#" onclick="foo()">Click</a>
但我不确定这是最好的方法,在这种情况下,它正在导航到 page.html#,这对我正在做的事情不利。
答:
<a href="javascript: foo()" >Click</a>
评论
只需确保从 onclick 处理程序返回即可。F.D.(英语:F.D.) 应定义为: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>
评论
调用 foo() 后返回 false
如果包括
return false;
从 onclick 事件中,则页面根本不会加载。例如:
<a href="#" onclick="foo();return false;">Click</a>
或者在函数本身中:
function foo() {
// other stuff
return false;
}
设置 href 属性以执行 javascript。喜欢这个:
<a href="javascript:foo()">Click</a>
这样一来,你们所有人都可以按预期工作:悬停CSS样式。
问题是它会将浏览器抛到页面顶部。您可以执行以下操作: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
});
评论
首先,有两种方法可以设置 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();
}
}
评论
通常,您应该始终有一个回退链接,以确保禁用了 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 的查看者会查看您的增强功能。
编辑:正如 nickf 在评论 #2 中指出的那样,如果您的处理程序中出现错误,尝试和捕获将阻止链接跟随。
评论
很多混淆都是关于a标签的使用,因为它们跨浏览器支持:hover伪css选择器...
因此,使用 a 标签通常是显而易见的,因为它会根据鼠标悬停的不同阶段呈现不同的内容......
有些人会声称 :hover 伪标签中内置的功能根本不应该可用,因为 W3C 的意图是将动态 html 的三个部分中的内容、视觉呈现和功能分开;HTML、CSS 和 JavaScript。
但现在我们坚持使用它,目前它以多种方式使用 a-tags 是有效的,因为它们以简单的方式完成任务,而且它是右前跨浏览器的!
但这意味着您有时必须禁用这些链接标签的默认行为,这意味着您必须使 onclick-event 返回 false,当更改当前文档的内容没有意义时......
但是,可以使用关闭默认行为的很好的例子,例如即使用户禁用了javascript,也可以提供具有某些属性的弹出窗口:
<a href="http://en.wikipedia.org/wiki/Css" onclick="window.open(this.href,'_blank','width=600,height=450,status=no');return false;">Show wikipedia css</a>
当心只是使用
<a href="#">Click</a>
因为它可能会导致令人讨厌的 IE6 问题。
我总是建议使用一个不指向任何内容的锚点。我喜欢用这个
<a href="#MAGIC">Click</a>
因为它让我发笑。
上一个:阻止直接访问 PHP 页面
下一个:在用户向下滚动时加载内容
评论