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

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

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

相关推荐

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

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

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

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

关于v-if和v-for不能一起使用在同一个标签上

遍历object的所有value(即li中的v-for),当拿到testData的第一个元素TESTOBJECT时,执行div中的v-for,此时的item对应T E S T O B J E C T这10个元素,于是循环10次,每一次都判断当前元素是否是array,很显然每次判断都是object

<script>标签的属性

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

用css设置a标签无效,让链接跳转失效

这个代码有个坑,就是如果a标签里面放了一个图片,然后给a标签设置这个样式,这个时候是不起效果的,只能在a标签外面包一个div,然后给div设置这个样式

html的title和alt的区别

alt标签是html标签的属性,而title即使标签,又是标签的属性。 当title作为属性时,用来为元素提供额外的说明信息。当鼠标移入变迁内会显示title的内容,以达到补充说明或提示的效果。

video标签的属性

HTML5是下一代HTML,新增了许多新的标签,这些标签实现了许多新的功能。并且还减少了对外部插件的要求同时也可以更好的处理错误。比如HTML5中的video标签就可以很好的实现了在页面上播放视频的效果。

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

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

html富文本的 ↵ 转为</br>标签

‘↵’是回车符/n,这段内容是通过textarea人为编辑,提交给后端保存的。编辑框中可以识别的字符,在普通的标签里面没办法识别到,所以要转换成可以识别的<br/>

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

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

点击更多...

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