前几天有人问我为什么她的点击事件不好使呢?效果闪一下就没有了?
首先她的点击事件没有加给button或者其他标签,当然a标签是可以加的,但是一般a标签我们都是用来链接到某个网页或位置,它的href属性一般是有值的,或者尽管没有给href属性值,也会有#或者javascript:;这种,那么问题就是出现在了这个属性上。
接下来分情况说一下:
href="#"
这个添加点击事件是没有问题的
href="javascript:;"
同#也是木有问题的
href=""
问题来了,测试时除alert(1);方式,其他OK,效果是一闪而过,显然不能达到我们日常的效果,当写上了href属性,就代表它有默认的点击事件,那就是跳到相应的页面或者页面位置,如果不写值,就会刷新页面,而一般我们测试时,通过点击某个按钮触发事件给页面添加效果时,再次刷新页面会回到原来的状态,所以href属性值什么都不写,反而给a标签又加点击事件,问题就出现了,效果刚有,又因为页面刷新,刚触发的效果又回到原始状态,这就是“一闪而过”的效果。
#号,会在地址栏里最后添加#,页面内容不刷新,不跳转,所以不会出现上述问题。
javascript:;是表示在触发默认动作时,执行一段JavaScript代码,而 javascript:; 表示什么都不执行,这样点击时就没有任何反应,所以不会出现上述问题。
解决方式:
阻止默认事件 在新加的click事件中最后加一句:return false;上述问题可以解决。但是默认跳转页面功能会消失(这是必然,因为已经人为阻止这个行为的发生)。
无href属性
没有这个属性也就不会有默认刷新当前页面功能,所以不会出现上述问题。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<a id="click1" href="#" title="">点击</a>
<a id="click2" href="javascript:;" title="">点击</a>
<a id="click3" href="" title="">点击</a>
<a id="click4" title="">点击</a>
<script>
var oClick1 = document.getElementById('click1');
var oClick2 = document.getElementById('click2');
var oClick3 = document.getElementById('click3');
var oClick4 = document.getElementById('click4');
oClick1.onclick = function(){
console.log(1);
// return false;
}
oClick2.onclick = function(){
console.log(1);
// return false;
}
oClick3.onclick = function(){
console.log(1);
return false;
}
oClick4.onclick = function(){
console.log(1);
// return false;
}
</script>
</body>
</html>
综上所述:一般制作按钮,没有跳转功能建议用button,语义感强,易理解,不易出错。