IE6 a href onclick 執行順序

來源:互聯網
上載者:User
一、以下是百度的轉摘:http://hi.baidu.com/daijun2007/blog/item/750259df953c071e62279868.html
IE6 a href onclick相容性問題2010-07-14 16:19

<a href='javascript:void(0);' onclick='_gotoPage(url_go , 2, 10)' >")下一頁</a>

IE6下上面的onclick事件不會被響應,換成下面的就OK了,加上return false

<a href='javascript:void(0);' onclick='_gotoPage(url_go , 2, 10) return false;'
>")下一頁</a>;

請求的連結是用的 A 標籤,A上同時寫了href和onclick事件。對於連結 A 標籤而言,當使用者按一下滑鼠的時候,A對象被觸發時會首先去執行onclick部分,然後是href,如果是ie6的話,執行onclick,發出http請求。瞬時又執行href,這時ie6就會abort前一個請求。

解決方案就是:

直接把onclick事件寫在href中:href="javascript:do()"
還有一種解決方案:<a href="javascript:void(0)" onclick="do();return false;">Hello World</a>
這樣是忽略了href部分,這對於通過onclick傳遞this,或者無法避開a對象時都有用。

二、以下是指令碼之家的轉摘:http://www.jb51.net/article/13397.htm

很久都沒有寫關於代碼方面的文章了。主要原因還是因為最近的工作都集中在需求分析方面,沒有了現實中的感觸,就沒有了寫作的動機。討論一個關於JScript執行順序的問題。範例程式碼如下:

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 onmouseup onclick
IE b.htm d.htm c.htm d.htm
FireFox c.htm->b.htm e.htm->d.htm c.htm->b.htm e.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例中的現象?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.