<input type="image">は、グラフィカルなsubmitボタン

最近ハマった問題。

【問題】
 ◆予期せぬ画面リロードが発生する。

【原因】
 ◆<input type="image">タグをクリックした際に発生するクリックイベントを拾って、window.showModalDialogを起動していること。

<head>
 <script type="text/javascript">
   $(function(){
    $("#imageId").click(function(){
        window.showModalDialog(uri, arguments, options);
    });
   });
 </script>
</head>

<body>
 <form>
  <input id="imageId" type="image" src="画像のソース"/>
 </form>
</body>

下記シーケンスにより画面がリロードされる。

①inputタグで表示された画像をクリック
②クリックイベントが発生
③window.showModalDialogメソッドが実行される。この時、window.showModalDialog実行元の画面の処理は停止し、モーダルな画面へ処理が移る
④モーダルなポップアップ画面を閉じる。この時、window.showModalDialog実行元の画面の処理が再開する
⑤type属性の値がimageであるinputタグはsubmitボタンであるため、<input type="image">によるsubmitが発生する(画面がリロードされる)。

【解決案】
・<input type="image">を使用しない。
代わりに、<a href="#"><img src="" alt=""></a>を使用する。

【参照サイト】
http://support.microsoft.com/kb/822276/ja
http://www.w3.org/TR/html4/interact/forms.html