01月05, 2012

href javascript target onclick 执行顺序 浏览器兼容问题

在修改别人代码的时候发现了如下代码

在chrome 中会执行dosomething(),没有任何问题,

在IE中会打开一个路径为javascript: dosomething();新窗口并报错

显然 这不是return false一类的问题

经过测试 我总结一下 href javascript target onclick 执行顺序 浏览器兼容问题

在我测试的所有浏览器中 onclick 总是优先执行

在chrome safari中, 如果href 中是javascript:语句 target 就被忽略

在ie firefox中, 先执行target 然后执行href , 换句话说 href 中的javascript 是基于 target的 context

就变成了 target.href

在本例中 就是在_blank窗口中执行 dosomething() 函数,新窗口是空窗口当然不会有这个函数的定义 所以会报错

流程是 先执行onclick 然后打开target 然后在target中执行dosomething()

用iframe的情况很明显

点我1

以上代码在chrome, safari中 target 被忽略 先执行

alert('click')
然后
alert('current page');

在IE, firefox中 情况不一样

先执行

alert('click') 然后会执行newframe中的did()函数
所以target很重要 而且不可以在href中更改target 的值因为target会先于href执行
完全可以在onclick中控制 target 和href  因为onclick 是最优先执行的
回到最开始的问题
 

根据表现看,这个link的target 是_blank 一类的新窗口, 但是并没有发现target="_blank"的代码

这可能是最吭爹的

原来是切页面的同学 为了让每个a 都在新窗口打开 加了一个

<

p>这样所有的A 的target都会变成 _blank 也就有了我们一开始的部题

<

p>解决办法:

很简单了 就是要把target的值改过来, target="_self" 或去掉base 语句 当然你需要修改其它的a link

其实在这个需求中 是完全没有必要 用href来执行javascript的 onclick 更好

原文:http://www.qiongbupa.com/archives/903

本文链接:https://75team.com/post/href-javascript-target-onclick-执行顺序-浏览器兼容问题.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。