美文网首页
href 和 onclick那些事

href 和 onclick那些事

作者: 金声玉振 | 来源:发表于2015-05-12 11:16 被阅读128次

    freeshare中发现一个bug:

    <a href="javascrit:void(0)" onclick="displayIt(this)"></a>

    现象:在chrome中可以正常执行;360极速模式中不可以正常执行,页面url没有跳转;火狐及IE中不可以执行,并且会跳转到javascrit:void(0)页面

    bug原因:javascript拼写错误!修改后都可以正常执行了。However,事情没有这么简单,不然每个浏览器的反应为什么会各不相同。经查阅,href执行的是浏览器内置的脚本,onclick执行的是自定义的脚本,问题就是哪个会先被执行。

    链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接);假设链接中同时存在 href 与 onclick,如果想让 href 属性下的动作不执行,onclick 必须得到一个 false 的返回值。

    即: href="javascrit:void(0)" onclick="displayIt(this); return false;" 这样不管href是什么,对不对,都不会执行href里面的内容了。这可以解释火狐和IE了,但是还是无法解释chrome为什么这么神奇,360也许没有更新最新的chrome版本所以和谁也不一样吧。历史上chrome曾经不支持return false 但是现在已经debug了(code.google.com/p/chromium/issues/detail

    关于 return false 还有一些tips:

    jqeury会把事件的响应函数封装在一个dispach的函数里 如果发现你的函数return false 就会同时调会preventDefault() 和stopPropagation()。所以在jquery中 return false 等价于:

    e.preventDefault()

    e.stopPropagation()

    return false;

    这三个

    所以,return false 的作用大于preventDefault(阻止默认事件)和 stopProgagation(阻止向上冒泡),使用时注意差别。

    相关文章

      网友评论

          本文标题:href 和 onclick那些事

          本文链接:https://www.haomeiwen.com/subject/zfefqttx.html