a.htm
A onmouseup="func('onmouseup')" href="b.htm"Click Me!/A A onclick="func2('onclick')" href="d.htm"Click Me!/A SPAN id=msg/SPAN
SCRIPT
function func(str)
{
msg(str);
window.location.href="c.htm";
}
function msg(str)
{
document.getElementById("msg").innerText=str; //A
//alert(str); //B
}
function func2(str)
{
msg(str);
window.location.href="e.htm";
}
/SCRIPT
在msg(str)有个注释掉的行,试验的时候分别执行A和B。
A B onmouseup onclick onmouseuponclick IE b.htm d.htm c.htmd.htm FireFox c.htm-b.htm e.htm-d.htm c.htm-b.htme.htm-d.htm
上表主要列出了两个浏览器中的执行顺序,红色代表页面脚本跳转的页面,蓝色是Anchor标签的href属性。从上面可以看出,对于FireFox,始终先执行页面脚本,然后浏览器再跳转。而IE里面执行的过程却有差别:
1、使用后退按钮直接回到a.htm,即页面只执行了一个跳转;
2、在使用alert中断的情况下,onmouseup执行了页面脚本中的跳转。
从上可以看出,
1、对于FireFox而言,页面脚本执行顺序始终优先于浏览器内嵌脚本执行顺序,这个已经很明显了。
2、IE中,HREF的执行顺序为onmouseup-href-onclick。真的吗?
为了更加明确2中的执行顺序,我们继续分析onclick和href的执行顺序关系。在上述例子中,onclick是采用调入的方式执行的。如果a. 我们使用以下的测试代码:
a href="d.htm" onclick="return false;"Click Me!/a
发现HREF不能被执行。
b. 如果我们使用以下测试代码:
a href="d.htm" onclick="window.location.href='e.htm';return false;"Click Me!/a
发现依旧执行HREF的d.htm,而不是onclick中的e.htm。
c. 如果我们使用以下测试代码:
a href="d.htm" onclick="msg('onclick');return false;"Click Me!/a( function msg()的代码如上)
发现执行了function msg(),而HREF不被触发。
晕了。IE的确是个诡异的东西。谁能帮忙解释一下b例中的现象?
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)