之前在使用<a>标签的href和onclick方法时,碰到了一些问题,最近又碰到了。然后做了一点实验,记一下使用<a>中的href和onclick属性时需要注意的一些地方。
问题一 <a>打开新页面跳转的浏览器默认页面
在之前的需求实现中,确实是碰到过这样的问题,不过暂时记不起当时的情况了。从这次的实验看来,估计当时是写错了什么东西才导致的。有可能是写错了url,有可能是href里面写错了方法。
问题二 href和onclick的优先级
直接看下面的示例:
<html>
<head>
<title></title>
</head>
<body>
<a href="javascript:void(0)" onclick="jump1()">打开百度</a>
</body>
<script type="text/javascript">
function jump1 () {
window.open("http://www.baidu.com");
}
</script>
</html>
上面的示例中,点击会打开新页面,并且打开百度首页。我之前认为在chrome中会在新页面中打开百度,而在firefox中只会打开默认的首页,但是实际的测试结果表明都是会在新页面中打开百度。在href中,因为执行的方法是void(0),本身该方法是没有任何效果的,那么点击<a>标签的时候,到底有没有执行href中的代码呢,再看下面的这个示例:
<html>
<head>
<title></title>
</head>
<body>
<a href="javascript:jump1();" onclick="jump2()">打开百度</a>
</body>
<script type="text/javascript">
function jump1 () {
window.open("http://www.baidu.com");
}
function jump2 (){
window.open("https://www.jd.com");
}
</script>
</html>
上面的示例中,执行的的结果是先打开一个新页面,跳到京东,然后再打开一个新页面,跳到百度。如果把href和onclick中的方法互换,则先跳到百度,再跳到京东。就是说,href和onclick中的方法都执行了,并且onclick具有比href更高的优先级,因此会先执行onclick中的方法。如果不希望执行href里面的方法,可以在onclick的方法后面加上return false;。当然,可以直接把href去掉,这样做会少了<a>标签的样式,或者把onclick的方法写到href中,去掉onclick。
内容差不多就这么多,主要是在a标签中,onclick比href的执行优先级要高。另外在一些文章中提到尽量不要在href中使用javascript:协议,会触发onbeforeunload事件,即在刷新或者离开当前页面时,会有提示是否离开当前页面,但是我暂时没有看到。