a标签中href和onclick属性同时存在的问题

更新日期: 2023-02-06阅读: 1.5k标签: 标签

a是html语言标签。用于定义超链接,用于从一个页面链接到另一个页面,一般都是通过href或onclick属性来实现跳转功能。那如果2个属性同时存在,它们的执行顺序,相互影响有哪些区别呢?


示例代码

下面代码是跳转谷歌,还是fly63前端网呢?

<a href="https://www.fly63.com" onclick="doSomthing()">fly63前端网</a>
<script>
function doSomthing(){
window.location.href = "https://www.google.com";
}
</script>

经过多个浏览器测试,最终结果是跳转fly63前端网。但doSomthing事件是在跳转fly63前端网之前执行了的,只是location.href被中止取消了。

如果不执行href里的链接,在onclick中添加return false即可:

<a href="https://www.fly63.com" onclick="doSomthing();return false;">fly63前端网</a>

或者通过e.preventDefault();来阻止默认事件,比如:

<script>
function doSomthing(){
let e=window.event || arguments.callee.caller.arguments[0];
e.preventDefault();
console.log("执行doSomthing")
window.location.href = "https://www.google.com";
}
</script>


区别如下:

1、链接的onclick事件被先执行,其次是href属性下的动作(页面跳转,或 javascript 伪链接);注意:ie6中href先触发,onclick后触发。

2、如果想让href属性下的默认动作不执行有2种方式:

onclick必须得到一个false的返值
onclick方法中设置e.preventDefault()来阻止默认事件。

3、如果页面过长有滚动条,且希望通过链接的onclick事件执行操作。应将它的href属性设为javascript:void(0);,而不要是#,这可以防止不必要的页面跳动;在这里javascript:void(0),没启实质上的作用,它仅仅是一个死链接,只会执行onclick事件。

4、如果在链接的href属性中调用一个有返回值的函数,当前页面的内容将被此函数的返回值代替;

注意事项:

但是以上的onclick事件不能包括οnclick="window.open('url',' ');"这种情况,要是onclick有了window.open但是又不想页面发生跳转,我们可以在当前页面嵌套一个iframe,给它起一个name="newName"和id="newName",而把里面写入空的html、head、body;并在onclick里写入"window.open('url',' newName');",这样,当前页面就相当于做了一个假跳转,也不用href属性防止跳转了。


推荐写法:

由于2则都可以使用js事件方法,那么不同的场景推荐如下:

1、在不需要传递this作为方法的参数时候,可以使用href="JavaScript: "方式(但不推荐):

<a href="javascript:doSomthing();">fly63</a>
<script>
function doSomthing(){
console.log('href event')
}
</script>
不推荐理由:尽量不要用javascript:协议做为a的href属性,这样不仅会导致不必要的触发window.onbeforeunload事件,在IE里面更会使gif动画图片停止播放。

2、如果需要使用this参数,只能onclick的方法(推荐)

<a href="javascript:void(0);" onclick="doSomthing(this)">fly63</a>
<script>
function doSomthing(self){
console.log(self) //处理其他事务 window.location.href = "https://www.fly63.com";
}
</script>


链接: https://fly63.com/article/detial/12355

Html中a标签用法总结:创建email,电话,描点链接等。以及防止链接被搜索引擎收录

a标签是我们常用的一个标签之一,这篇文章主要讲解如何使用a来创建email,电话,描点链接等。以及防止链接被搜索引擎收录。

web标签语义化的理解_web语义化是什么意思

Web语义化,使用语义恰当的标签,可以让页面具有良好的结构,页面元素具有良好的含义,从而让人和机器都能快速理解。语义化的web页面一方面可以让机器在更少的人类干预情况下收集并研究网页的信息,从而可以读懂网页的内容

HTML中<base>标签的正确使用

<base> 标签必须位于 <head> 元素内部,在一个文档中,最多能使用一个 <base> 标签,使用了<base>标签的链接后,其他链接必须在<base>标签的链接里面,不然将无法找到。

使用Map标签指定点击区域时的兼容性问题

因为map标签用的较少,而常用的label标签中的for属性,是不需要加#的,加上了反而会有错。当然,label和map中的用法也不同,不论如何,引以为戒

html 标签优化_如何优化网站HTML标签代码优化

如何优化网站HTML标签代码优化?选用合适的标签、htm5提供了很多类型的input的type类型、使用html5语义化标签等

js动态添加html标签和属性_手动插入meta、script、div、img等标签

web网页是由 html标签一层层组成的,js也可以动态添加对应的标签,比如mate标签、script标签、div标签、img标签等,动态创建的方法基本都差不多,下面将简单介绍下如何实现

head里两个重要标签base和meta

<base>我们并不常用的一个标签,但是一旦用得不当会带来灾难性的影响。meta标签日常开发中我们用得更多的是meta标签,分为3类:具有charset属性的meta 、带有http-equiv 属性的 meta

JSTL学习总结

在mvnrepository中,直接搜索jstl,,找到下载量最高的,下载1.2版本。下载完导入到项目里面就好了。jstl是apache对EL表达式的扩展,使用需导jar包

<script>标签的属性

src定义引用外部脚本的URI,这可以用来代替直接在文档中嵌入脚本。指定了 src 属性的script元素标签内不应该再有嵌入的脚本。type该属性定义script元素包含或src引用的脚本语言。

10 个不常用但你有必要知道的 html 标签

HTML 也被称为超文本记语言( hyper text markup language )是为网页创建和其他可在网页浏览器中看到的信息设计的一种标记语言。HTML 被用来结构化信息,如标题、段落和列表等,也可用来在一定程度上描述文档的外观和语义。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!