2011年5月18日 星期三

<button>在 IE6 與 IE8 有不同的表現行為

在網頁上,要顯示一個按鈕,除了使用
<input type="button" value="btn" id="btn" name="btn">
之外,你還可以用
<button id="btn" name="btn"></button>
來達到目的。

但使用<button>這語法,最近卻讓我吃足了苦頭,發現在 IE6 與 IE8 竟然會有不同的執行結果。經過觀察後發現,在 IE6使用<button>,並不會觸發 PostBack,但在 IE8 卻會。

原來,<button> 其實有一個屬性:type,可以允許你挑選 submit、button、reset。選擇 submit 時,就會觸發 Asp.Net 的 PostBack,而 button 則是視為一般的按鈕事件,並不會觸發 PostBack。 當你不指定時,就會以預設行為模式來處理。而有趣的地方,就在於這預設行為模式怎麼判定。在 IE6,預設行為模式是 button,也就是不會觸發 PostBack,但是在 IE8,則改成 submit,變成會觸發 PostBack了,另外,非IE 的瀏覽器,則預設行為一律都是 submit。

以下是測試程式:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Button.aspx.cs" Inherits="Button" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>未命名頁面</title>
    <style>
    * { font-size:14px }
    p {width:400px}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <button id="btn" name="btn" value="btnTest">Default</button><br />    
    <button id="btnSubmit" name="btnSubmit" value="btnSubmit" type="submit">Force Submit</button><br />    
    <button id="btnButton" name="btnButton" value="btnButton" type="button">Force Button</button><br />    
    </div>
 <script>
        document.write('<p><font color="blue">Browser Name:</font><br/>'+navigator.appName+navigator.appVersion+'</p>');
  document.write('<font color="blue">Default:</font> ' + document.getElementById('btn').type + '<br />');
  document.write('<font color="blue">Force Submit:</font> ' + document.getElementById('btnSubmit').type + '<br />');
  document.write('<font color="blue">Force Button:</font> ' + document.getElementById('btnButton').type + '<br />');
  

 </script>
    
    </form>
</body>
</html>


執行後於各瀏覽器的結果:
所以,為了能在不同瀏覽器上達到預期的效果,請別忘了在使用 <button> 時,定義好他的 type 屬性。

參考:
01:IE 8 Button Element Bug
02:HF9015: IE6 IE7 IE8(Q) 中 BUTTON 元素的 type 属性默认值不是 submit

沒有留言:

張貼留言