ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

IE嫌いコミュのボタンに対するieの挙動を矯正する方法はないでしょうか?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ieはフォームの送信ボタンに対して独自の反応を示し、頭痛の種です。
これを矯正するのに、ieユーザーの「無知」を利用できないものでしょうか?
という質問です。

▼現状

ファイル名:test.html
フォーム:
<form action="test.html" method="get">
<button type="submit" name="sub" value="bt1">button1</button>
<button type="submit" name="sub" value="bt2">button2</button>
</form>
を含むhtmlファイルで、button2をクリックして送信内容を見ると、結果は、

opera9:  ?sub=bt2
firefox2: ?sub=bt2
safari3: ?sub=bt2
ie7:   ?sub=button2
ie6:   ?sub=button1&sub=button2

呆れるというか、怒りが込み上げてきます。とりわけie7の裏切りは許せない。
何も知らない人たちは、ボタン毎にname値を変えるのが当たり前だと思っている。
そうやって、MS社の独自仕様に馴らされてしまっている。

▼対策は?

じゃあ、一営利企業の戦略に屈して、name値をやたら増やすか?対策はないのか?
最近気がついたのですが、ieを愛用している人たちは、webやhtmlの基礎知識が貧弱。
そういうと、当人たちは怒るのですが、実際MS社の腹の中で踊っているに過ぎない。
それが証拠に彼らはたいてい、JavaScript をサイトを選ばずにONにしっぱなしです。
! あくまでも経験則ですが、これは利用できそうです。
JavaScript でieの挙動を矯正できないものでしょうか?

いろいろ試みているのですが、知識不足で、送信データの中から
sub=button1&sub=button2
を消去できずにいます。(個別に細かくぐちゃぐちゃやらずに消したい)

<input type="hidden" name="alt">
というような隠しフォームを追加して、別のnameに値を写し取ることは容易ですが、
そうすると、データを受け取る方のCGIで注意しなければならなくなってしまいます。
▽例:
<script type="text/javascript">
<!--
function ShitIE(v,tag,form) {
if ( /*@cc_on!@*/false ) {
form.alt.name = "alt_" + tag.name;
form.alt.value = v;
}}
// -->
</script>

<form action="test.html" method="get">
<button type="submit" name="sub" value="bt1"
onClick='ShitIE("bt1",this,this.form);'>button1</button>
<button type="submit" name="sub" value="bt2"
onClick='ShitIE("bt2",this,this.form);'>button2</button>
<input type="hidden" name="alt">
</form>

一つの考え方としては。
type="submit" を type="button" にして、全てjavascriptに委ねる
という発想もありますが、それこそ敵のの思うつぼ!
断固として javascriptをoffにした状態でも正常に動作するようにしたい。
基本動作が javascript に依存したサイト構築は私のプライドが許しません。


「ie使い ⊆ javascriptをONにしっ放しの人たち」
という発想から生まれたこのie矯正方法。
成功に導く何か良い案はないでしょうか?

コメント(6)

method="get" にしておくと、受け手のCGIを作らなくてもアドレス欄で結果が確認できるメリットがあります。
eg. file:///F:/test.html?sub=button1&sub=button2
自己レスです。
その後、ジタバタ考えた結果こんなムリクリ技もあります。
しかし、タグの誤用甚だしく、何よりスマートではありません。
もっと、良い方法をどなたかよろしくお願いします。

<form action="test.html" method="get">
<noscript>
<style type="text/css">
<!--
.jshide{display:none;}
-->
</style>
<button type="submit" name="sub" value="bt1">button1</button>
<button type="submit" name="sub" value="bt2">button2</button>
<!--[if IE]>
<p>※インターネットエクスプローラをご利用のかたへ:JavaScript オフの状態では上記ボタンは正しく動作しません。
このフォームは ieの粗悪な欠陥を JavaScript によって矯正しております。</p>
<![endif]-->
</noscript>
<button type="button" onClick='this.form.sbx.name="sub";this.form.sbx.value="bt1";this.form.submit()' class="jshide">button1</button>
<button type="button" onClick='this.form.sbx.name="sub";this.form.sbx.value="bt2";this.form.submit()' class="jshide">button2</button>
<input type="hidden" name="sbx">
</form>
getでデータを渡すんだったら別にform使わなくてもいい気がするんですが…
> getでデータを渡すんだったら別にform使わなくてもいい気がするんですが…

はい。そうです。
しかしご指摘の送信メソッドの選択は、ここのテーマとは全く関係のない話です。

フォーム機能に関する ie のお馬鹿な振る舞いをどう直すかという問題です。ie 対策はしなければならないけど、Webアプリケーションの仕様を ie に合わせる気は毛頭無いので、フォームから送信される段階で正しいデータに直すにはどうすれば良いのかという話です。よろしく。


究極には「ieを標準に従うように矯正するパッチ」が開発されると良いのですが…
ieが嫌いな人たちから、何かいい情報が集まらないものかとトピックを立てさせていただいたのですが、空振りだったようですみません。自己レスですが、前のサンプルをもう少し洗い直して下記のようになりました。ie6でテストはしてありますが、ie7でのテストはしていません。たぶん大丈夫だと思います。では。


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>

<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css"><!-- .jshide{display:none;} --></style>
<script type="text/javascript"><!--
document.write("\x3cstyle type=\"text/css\"\x3e\x3c!\x2d\x2d .jshide{display:inline;} \x2d\x2d\x3e\x3c\x2fstyle\x3e")
function btn(kore,val){kore.name="sub";kore.value=val;}
// --></script>

</head>
<body>
<form action="" method="get">

<noscript>
<p>
<button type="submit" name="sub" value="bt1">button1</button>
<button type="submit" name="sub" value="bt2">button2</button>
</p>
<!--[if IE]>
<p>※インターネットエクスプローラをご利用のかたへ:JavaScript オフの状態では上記ボタンは正しく動作しません。このフォームではマイクロソフト社独自仕様を JavaScript によって矯正しております。この際なのでieを卒業して、Forefox, Opera, Safari 等の優良ブラウザをご利用されることをお勧めいたします。どうしても ie を使いたい場合は<詐欺等に会いやすく危険ですが>、スクリプトをオンにしてください。</p>
<![endif]-->
</noscript>
<p class="jshide">
<button type="submit" onClick='btn(this,"bt1");' onKeyPress='btn(this,"bt1");'>button1</button>
<button type="submit" onClick='btn(this,"bt2");' onKeyPress='btn(this,"bt2");'>button2</button>
</p>

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

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

IE嫌い 更新情報

IE嫌いのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング