WEB相談室

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

タイトル:Enterキーを押してのSubmit

0:[投稿] スズキ [2005/01/25 14:00 ][環境:IE6 WinXP IIS]

一般的にEnterキーを押すとインプットボタンのSubmitと同じアクションだと思っていたのですが、少し問題がありました。

スクリプトファイル名は"index.asp"です。
テキストが空白の状態でボタンを押すとエラーメッセージを出し、
何か入力されていれば"menu.asp"にリダイレクトされる仕組みです。

マウスでボタンをクリック、もしくはタブでフォーカスをボタンに移してからEnterキーを押した場合は問題ありません。
ただ、テキストにフォーカスを残したままEnterキーを押した場合、
Submitはされますが結果が異なっています。
詳しい方ご教授お願いします。

以下がそのコードです。

<%@Language=VBScript%>
<%
'--------------------------------------------------
'変数宣言
Dim strUSER
Dim strUSERError
Dim strLOGIN

Dim strScript

'--------------------------------------------------
'変数初期化
strUSERError=""
strUSER=Request.Form("USER")
strLOGIN=Request.Form("LOGIN")

'--------------------------------------------------
'ログインボタン押下時
If strLOGIN="ログイン" Then
'--------------------------------------------------
'ユーザー名が空白の場合
If strUSER="" Then
strUSERError="空白エラー"
Else
Response.Redirect "menu.asp"
End If
End If

'====================================================================
'HTML生成:ヘッダー部分

strScript=""
strScript=strScript & "<FORM NAME=""fr"" ACTION=""index.asp"" METHOD=""POST"">" & vbCrlf
strScript=strScript & "<TABLE width=""980"">" & vbCrlf
strScript=strScript & " <TBODY>" & vbCrlf
strScript=strScript & " <TR>" & vbCrlf
strScript=strScript & " <TD align=""center""><BR>" & vbCrlf
strScript=strScript & " <TABLE>" & vbCrlf
strScript=strScript & " <TBODY>" & vbCrlf
strScript=strScript & " <TR>" & vbCrlf
strScript=strScript & " <TD width=""430"" align=""center"" class=""MINUS1"">入力してください。</TD>" & vbCrlf
strScript=strScript & " </TR>" & vbCrlf
strScript=strScript & " <TR>" & vbCrlf
strScript=strScript & " <TD align=""center""><INPUT TYPE=""text"" NAME=""USER"" MAXLENGTH=""7"" VALUE=" & strUSER & "></TD>" & vbCrlf
strScript=strScript & " </TR>" & vbCrlf
strScript=strScript & " <TR>" & vbCrlf
strScript=strScript & " <TD height=""15"" nowrap></TD>" & vbCrlf
strScript=strScript & " </TR>" & vbCrlf
strScript=strScript & " <TR>" & vbCrlf
strScript=strScript & " <TD align=""center""><INPUT TYPE=""SUBMIT"" NAME=""LOGIN"" VALUE=""ログイン""></TD>" & vbCrlf
strScript=strScript & " </TR>" & vbCrlf
strScript=strScript & " <TR>" & vbCrlf
strScript=strScript & " <TD height=""15"" nowrap></TD>" & vbCrlf
strScript=strScript & " </TR>" & vbCrlf
strScript=strScript & " <TR>" & vbCrlf
strScript=strScript & " <TD align=""center"" class=""ERRMSG"">" & strUSERError & "</TD>" & vbCrlf
strScript=strScript & " </TR>" & vbCrlf
strScript=strScript & " </TBODY>" & vbCrlf
strScript=strScript & " </TABLE>" & vbCrlf
strScript=strScript & " <BR>" & vbCrlf
strScript=strScript & " </TD>" & vbCrlf
strScript=strScript & " </TR>" & vbCrlf
strScript=strScript & " </TBODY>" & vbCrlf
strScript=strScript & "</TABLE>" & vbCrlf
strScript=strScript & "</FORM>" & vbCrlf
strScript=strScript & "</BODY>" & vbCrlf
strScript=strScript & "</HTML>" & vbCrlf

Response.Write(strScript)

%>


1:[回答] サム [2005/01/25 14:10 ]

結果が異なるとありますが、どう異なるのでしょうか?


2:[関連] スズキ [2005/01/25 15:09 ]

通常はテキストが空白だとエラーメッセージが出ますが、
Enterキーだと何もメッセージが出ていません。

フォームの「action="index.asp"」を通っているのでindex.aspの再描画は行われているのですが、
結果が異なるが非常に不思議です・・・。


3:[回答] ゆり [2005/01/25 15:55 ]

ASPは分からなくて恐縮なのですが、以前JSP+Servletで
開発をしていたとき似たような問題が起きた事がありました。

複数のsubmitボタンがある画面で、
どのボタンを押しても処理用のServletに送信し、
Servletでどのボタンが押されたか判別して処理するようなプログラムでした。
ボタンが押されてsubmitした場合はボタン名が取れるのですが、
Enterでsubmitされた場合はボタン名が取得ず、処理が正常に行えません。

なので、スズキさんの場合も「ログイン」というボタン名が取れず、
if文に入っていないのかな?と思ったのですが、
処理は出来ているんですよね・・・?
ボタンも1つなので、他のボタンが実行されている可能性も無さそうですし。

あまりお役には立たないかもしれませんが、ご参考までに。

(ちなみにそのときは「Enterを無効にする」
「ボタン名が取れない場合は最初のボタンが押されことにする」
という解決案が出されて後者にしました。)


4:[完了] スズキ [2005/01/25 16:31 ]

調べて分かったのですが・・・

テキストボックスが1つの場合
フォーカスをテキストボックスにある状態でEnterボタンを押すと
Submitイベントは発生します。
ただし、Request.formでは何も渡しません。
今回の例だと、「ログイン」ボタンのvalueを渡しているのですが、これは空白で渡されます。
そのため結果が異なっていたのです。
ちなみにこの時点でフォーカスはSubmitボタンに自動で移動されます。
そのため、もう一度クリックすれば正しくSubmitされます


テキストボックスが複数ある場合
一つのときと違って問題なくSubmitされます。値も渡されます。

ちなみにボタンの数は関係ないようです。
なんかよく分からない仕様みたいです。お世話かけました。


5:[完了] AC1号 [2005/01/25 21:44 ]

MSDNにはこんなことが書いてあります。
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.

テキストボックスが1つの場合は、ボタンが無くてもEnterキーでsubmitイベントが発生します。ボタンがある場合でもボタンが無いときと同じ動作をするのでしょう。
一方、テキストボックスが1個以外の場合は、ボタンがある場合にのみEnterキーでsubmitできます。これはテキストボックス1個の場合と異なり、「submitボタンが押された」のと同じ動作になっているようです。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World