2008年12月11日
[HTML] IE 表單 Enter 的 Bug
小魚發現了一個 IE 的表單的問題:
如果表單上只有一個 text 欄位和多個有 name 屬性的 submit 按鈕,那麼當表單焦點在 text 欄位時,我們按下 Enter 鍵時,瀏覽器預設會把表單送出。
但是如果是在 IE 上執行這個動作,那麼後端的 PHP 程式只會收到 text 欄位的值,而不會有 submit 按鈕的值;而其他瀏覽器 (如 Firefox ) 則不會有這個問題。
以下是範例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Enter Test</title>
</head>
<body>
<?php
var_dump($_POST);
?>
<form method="POST" action="?">
<p>
<input type="text" name="T1" size="20">
<input type="submit" value="Submit1" name="B1">
<input type="submit" value="Submit2" name="B2">
</p>
</form>
</body>
</html>
以上程式請存為 iebug.php ,放在網站根目錄下執行。在 IE 執行並在 text 欄位輸入 abc 按下 Enter 鍵後,得到的結果如下:
array
'T1' => string 'abc' (length=3)
而在 Firefox 結果如下:
array
'T1' => string 'abc' (length=3)
'B1' => string 'Submit1' (length=7)
也就是 Firefox 會將按下 Enter 鍵當做是按下第一個 Submit 鈕,而 IE 就不把它當做一回事了。
我幫小魚查了一下資料,發現國外已經有人提出這個 IE 的特色 (Bug?) 了:
小魚也發現如果在第一個 text 欄位後再放一個 text 欄位,那麼 IE 就會正常 (?) 把按下 Enter 鍵視為按下第一個 Submit 鈕。
在小魚提出這個發現後,我也剛好查到國外有人提出了相關的解法:
做法就是把剛剛額外加的 text 欄位用 style="visibility:hidden;display:none;" 藏起來。
以上幫小魚記錄一下這個問題,以後方便她查囉。
