WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:JavaScriptの実行が、Enterキー一発で実行できる場合とできない場合

0:[投稿] マーチ [2004/03/01 14:16 ][環境:WinXP IE Win]

こんにちは。
テキストボックスなどの入力項目があって、ボタン(image)を押したらJavaScriptで入力文字チェック(ダイアログ表示)が動作し、チェックにかからなければ次の画面へ遷移するページを作っています。

通常のページでは、入力してそのままEnterキーを押すとJavaScriptが呼び出されてから、次のページへ遷移するのですが、あるページではイメージをきちんとクリックするか、タブで移動してからEnterキーを押さないと処理が動きません。
プログラムを見比べても、特に違いがわかりません。
どういうケースが考えられるでしょうか?
漠然としていて申し訳ないのですが・・・
よろしくお願いします。


1:[回答] Yachimata [2004/03/01 14:40 ]

>あるページではイメージをきちんとクリックするか、タブで移動してからEnterキーを押さないと処理が動きません。

その場合、どのような挙動になりますか?


2:[回答] マーチ [2004/03/01 15:12 ]

ありがとうございます。

>あるページではイメージをきちんとクリックするか、タブで移動してからEnterキーを押さないと処理が動きません。

>>その場合、どのような挙動になりますか?

そのままEnterを押した場合は、次の画面Bへ遷移してしまいます。
(対象画面AのJavaScriptで、変数に値を持たせて画面Bで値を判定して、値が入っていない場合は、Response.Redirectでさらに違う画面Cに飛ばしています。なので、見た目上は画面Cに飛んでいるように見えます。)
ちなみに、画面Bで変数をResponse.Writeしてみると値は入っていませんでした。JavaScriptが呼べていないようです。


3:[回答] Yachimata [2004/03/01 15:24 ]

動作する画面としない画面を比較してみて下さい。

まず、ボタンの type はどのようになっていますか?
enter に拠る送信の場合、type が挙動を変えると聞いた事があります。

次に <form> の action はどうなっていますか?
これは関係無いかもしれませんが念の為に調査してみて下さい。


4:[回答] マーチ [2004/03/01 15:33 ]

ありがとうございます。
確認してみたところ、どちらも同じ内容でした。

<FORM method="post" action="test.asp" name="AAA">

<INPUT type=image src=xxx.gif value=登録 onClick="touroku();return touroku2()">


5:[回答] gun [2004/03/01 16:15 ]

おぼろげな回答ですみません。
以前、「インプットでEnterを押すとフォームがサブミット
される場合とされない場合がある」という内容の投稿を
見掛けた記憶があります。
この掲示板以外の場所かもしれませんが、キーワードを工夫
するとそういう話題の記事を探せると思います。

今回の場合もその事例の通りの挙動だと思われますので、
イメージボタンのクリックイベントは通らないのではない
でしょうか?(onClickにalertも入れてみればハッキリしますね)
Enterキーでのサブミットを回避する手段がなければ、
フォームのonSubmitイベントで入力文字チェックのスクリプト
を呼ぶのはいかがでしょうか?

この回答に間違いありましたらよろしく訂正お願いします。


6:[保留] マーチ [2004/03/01 16:43 ]

ありがとうございます。

キーワードで調べてみたところ、どうやらtextboxの個数と関係があるようです。Enterキーですぐにサブミットしてしまう(JavaScriptが呼ばれていない?)のは、textboxが1つだけのプログラムでした。textboxを増やしてみたら他のと同様の動きをしましたので・・・
Enterキーでのサブミットの回避方法は、gunさんに教えていただいたのでやってみようと思います。


7:[完了] マーチ [2004/03/01 16:47 ]

gunさんの方法で、Enterキー一発で、JavaScriptを呼ぶことができました。ありがとうございました!


8:[質問] マーチ [2004/03/01 17:06 ]

すみません。
解決したと思ったのですが、新たな問題が出てきました。
このページには、ボタンが3つあります。
「登録」「キャンセル」「削除」です。
「登録」と「削除」では、別のJavaScriptを呼んでいる為、フォームのonSubmitで特定のScriptを呼んでしまってはいけませんでした・・・
他の回避方法などありましたら、よろしくお願いします。


9:[回答] gun [2004/03/01 17:24 ]

イメージボタンのクリックイベントで、下のことを行う
(1)入力文字チェック
(2)正規ルートであることを示すフラグを立てる
(3)フォームのサブミット

フォームのonSubmitイベントで、(2)のフラグが立ってなかったら
サブミットをキャンセルする。

という方式だといかがでしょうか?


あとは、乱暴な方法かもしれませんが、
ダミーのテキストボックスをもう一つ非表示にしたりして
(style="visibility:hidden;")設置しておけば、
Enterでサブミットされるのを防げるかもしれません。


10:[回答] Yachimata [2004/03/01 17:44 ]

event.keyCode を見る、とかは如何でしょう。


11:[関連] AC [2004/03/01 20:24 ]

タイトルへの回答は、以下のMicrosoftのサイトに書いてあります。
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/form.asp
>If the form includes only one text box and the user presses ENTER, the onsubmit event fires. If the form has an INPUT type=submit element, it will appear as a button with a dark border, which indicates the user can press ENTER to submit the form.
つまり、 >>6 にある通り、textboxが1つだけのときにENTERを押すとonsubmitイベントが発生する、ということ。それ以外では、input type="submit"の要素があればユーザにEnterによりsubmitできる。
(これはIEの仕様なので、他のブラウザがどうなるかは分かりません。)


12:[関連] Yachimata [2004/03/02 08:00 ]

>それ以外では、input type="submit"の要素があればユーザにEnterによりsubmitできる。

つまり、input type="submit" の要素の onclick が起動する、という事になるのでしょうか。
では、<form> に input type="submit" が複数あり、
それぞれに別の onclick が設定されている場合は・・・?

textbox が一つだけど、同時に input type="submit" も存在する時は、そこに書かれた onclick は起動する?


幾つかパターンが考えられそうです。
ちょいと時間を見繕って試してみたいです。


13:[完了] マーチ [2004/03/02 14:06 ]

今回は、非表示のtextboxを作ることで解決しました。

>>9
で示された前者の方法で試してみたのですが、サブミットのキャンセルをした後に、そのまま文字チェックのScriptが呼ばれるということができませんでした。(書き方が悪かったのかもしれませんが・・・)

ありがとうございました。
助かりました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World