Shiliew 植树人

<a>标签中的href与onclick

2017-06-07
 

  之前在使用<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事件,即在刷新或者离开当前页面时,会有提示是否离开当前页面,但是我暂时没有看到。

参考

  关于<a>标签的onclick与href的执行顺序

  <a>标签的href和onclick属性


Comments

comments powered by HyperComments