- PR -

KeyEnter押下時にButton_Clickイベントを発生させる 使用言語C#

投稿者投稿内容
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-09-16 13:29
「KeyEnter押下時、フォーカスの移動」というスレッドを見たのですが、解決方法がわからなかったので書き込みさせてもらいます。

以前に、画面のどこを選択してもKeyEnterを押すと特定の画面へ移動してしまうという不具合が起こり、その対策として、以下のようなJavaScriptを記述しました。

<script language="JavaScript">
function chkEnter(){
 if(window.event.keyCode == 13){
   return false;
 }
return true;
}
</script>
<asp:textbox id="txtSearchLocationName" onkeydown="return chkEnter();" runat="server" Width="136px" CssClass="controls"></asp:textbox>

これにより、KeyEnterを使用不可にしておりました。
今回、TextBoxだけは、KeyEnter押下時に検索するという処理を加えることになりました。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5118&forum=7&6
に、
-----------------------------------------------------------------------
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(sender, False, True, True, True)
End If
End Sub
------------------------------------------------------------------------
とあったので参考にしようと思ったのですが、C#ではTextBoxにKeyDownイベントはなかったので、どうすればよいかと悩んでおります。

TextBoxに検索項目を入れて、TextBoxでKeyEnterを押すと検索が走るというのはYahooなど、どこにでもあるあたりまえの処理ですが、これをどう実現すればよいか分からずに困っています。

どなたかご教授願います。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-09-16 17:16
WindowsアプリでのTextBoxとWebアプリでのTextBoxは全く違うものですから
まず、切り分けて考えるようにしましょう。
で、WebアプリでTextBox(というより、Inputタグ)内での動作を追加する
場合は、KeyEnterでの処理として組み込まれているようなスクリプトを
記述する必要があります。
chkEnter関数の中で、イベントが発生したのがInputタグなのかどうかを
判別し、Inputタグ内であったら検索ページにとぶ、といった処理を
スクリプトで記述してあげましょう。
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-09-16 19:21
小野@EACさん、早速の返答ありがとうございます。
先ず、自分の作りたいものはWebアプリです。そうしますと、下に書いたサンプルはWindowsアプリなので使えなくて当然ですね。(こんなことにも気づかないとは…

もうひとつ、疑問点が出てきたので書き込みします。
先ず、WebフォームとHTMLの違いですが、サーバーサイドで処理を行うのがWebフォーム、クライアント側で処理を行うのがHTMLと私は解釈しております。
で、WebフォームでできたButtonでクリックするとサーバーサイドでイベントが起こるわけですが、このクリックイベントをJavaScriptで記述できるんでしょうか?
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-09-16 21:42
引用:

たけくんさんの書き込み (2003-09-16 19:21) より:
先ず、WebフォームとHTMLの違いですが、サーバーサイドで処理を行うのがWebフォーム、クライアント側で処理を行うのがHTMLと私は解釈しております。


私の解釈ですが、
「サーバ上でブラウザに返すためのHTMLを組み立てるという処理を
 行っているのがWebフォーム」
だと考えています。

引用:

で、WebフォームでできたButtonでクリックするとサーバーサイドでイベントが起こるわけですが、このクリックイベントをJavaScriptで記述できるんでしょうか?


Buttonをクリックした場合、PostBackしてサーバにアクセスするのであれば
そのイベントをサーバ側で処理することができます。
イベントに対する処理はASP.NETの内部での記述となりますので、C#でもVB.NETでも
JScriptでも記述できます。

Buttonをクリックした場合、サーバへアクセスさせないで、ブラウザの中で
処理させることも可能です。
この場合は、スクリプトによってDHTMLを記述することになります。

このあたり、何がしたいかによって、切り分ける必要があります。
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-09-17 17:42
どのように書いていいのか恥ずかしながらまったく分かりません。書き方を教えていただければと思います。
やりたいことは
1.Webフォームのテキストボックスに検索条件を入れる
2.テキストボックス入力後、Enterキーを押す
3.検索実行ボタンを押すことと同様に検索処理が走る。
です。
目標はほとんどの検索サイトにある、TextBoxに検索項目を入れて検索が走るという流れです。

テキストボックス
<asp:textbox id="txtSearchLocationName" onkeydown="return chkEnter();" runat="server" CssClass="textcontrols" Width="136px"></asp:textbox>

検索ボタン
<INPUT id="Submit1" type="submit" value="Submit" name="Submit1" runat="server" CausesValidation="False">

現時点でのJavaScript
<script language="JavaScript">
function chkEnter(){
 if(window.event.keyCode == 13){
    //return false;
 }
 return true;
}
</script>

上記のスクリプトは、画面上どこをマウスでクリックしたあと、Enterを押すと特定の画面へ移動する不具合があったため、Enterを使えなくなるように、全てのTexやFormに
onkeydown="return chkEnter();"
と書き加えました。


はほとんどの検索サイトにある、TextBoxに検索項目を入れて検索が走るという流れは自分なりに色々と調べまわったのですが、サンプルソースなども無く困り果てております。
ご教授よろしくお願いします。
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-09-17 23:47
テキストボックスでEnterキーを押下した時のみsubmitするサンプルです。
コード:
<html>

<head>
<script language="javascript">
function chkEnter(){
if(event.keyCode==13){
if(event.srcElement.tagName=="INPUT" && event.srcElement.type=="text"){
document.frm.submit();
//document.frm.search.click();でも可
}
return false;
}else{
return true;
}
}
</script>
</head>
<body>
<form name="frm">
<input type="text" name="txt" onkeydown="return chkEnter();">
<input type="submit" name="search" value="検索">
</form>
</body>
</html>




[ メッセージ編集済み 編集者: ぴで 編集日時 2003-09-17 23:47 ]
ant
ベテラン
会議室デビュー日: 2002/07/11
投稿数: 51
投稿日時: 2003-09-18 00:31
aspのことはわかりませんが、HTMLだとテキストボックスでEnterキーを押した場合は同一フォームのsubmitボタンが押されたことになります。
Yahooとかの検索ではJavaScriptとか使わなくてもあのような動きになります。

で、ページのどこでもEnterキーを押したらボタンが押されるのはどのようなときかやってみたら、このようなコードのときは大丈夫なのですが、

<html>
<body>
<form>
<input type="text">
<input type="submit" onclick="alert('a')">
</form>
</body>
</html>

下のようなコードだとなりました。

<html>
<body>
<input type="text">
<input type="submit" onclick="alert('a')">
</body>
</html>

formタグで囲んでないときにはどこでenterキーを押しても反応してしまうようです。
以下のようにinputタグのタイプをbuttonにするとまったく反応しなくなります。

<html>
<body>
<input type="text">
<input type="button" onclick="alert('a')">
</body>
</html>
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-09-18 00:56
引用:
ともさんの書き込み (2003-09-18 00:31) より:
aspのことはわかりませんが、HTMLだとテキストボックスでEnterキーを押した場合は同一フォームのsubmitボタンが押されたことになります。
Yahooとかの検索ではJavaScriptとか使わなくてもあのような動きになります。

submitボタンが押されるわけではなくsubmit動作が行われるだけです。
<form onsubmit="alert('b')">
と入れてみるとよく分かります。

引用:
下のようなコードだとなりました。
<html>
<body>
<input type="text">
<input type="submit" onclick="alert('a')">
</body>
</html>

FORMが無いのにsubmitボタンだけあるのは。。。

引用:

formタグで囲んでないときにはどこでenterキーを押しても反応してしまうようです。
以下のようにinputタグのタイプをbuttonにするとまったく反応しなくなります。

これは普通の動作ですね。

スキルアップ/キャリアアップ(JOB@IT)