- PR -

ログインボタンにフォーカスを当てたい

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-02-22 20:17
こんにちは。
VS2005のWEBサイトのことを教えてください。
マスターページにログインボックスを設けてログインできるようにしています。
各ページのPage_Loadで次のようにしてログインボタンをデフォルトボタンに設定しました。
Dim loginB As Button = Master.FindControl("Login1").FindControl("LoginView1").FindControl("Login1").FindControl("LoginButton")
If loginB Is Nothing Then
'ページ毎のデフォルトボタンを設定

Else
Dim script As String = _
"<script language='JavaScript'>" _
+ "document.getElementById('" _
+ loginB.ClientID _
+ "').focus(); <" + "/script>"
RegisterStartupScript("setfocus", script)

End If

上記のコードでデフォルトボタンは設定できたのですが、ユーザーIDとパスワードを入力してEnterキーを押すと画面によって動きがバラバラになってしまいます。
考えてみれば当然で、表示直後は確かにログインボタンがデフォルトになっていますがユーザーIDを入力しようとした瞬間にボタンからフォーカスが外れてしまいます。

ユーザーID、パスワードを入力したときにログインボタンにフォーカスを当てるにはどうしたら良いのでしょうか?
ユーザーIDとパスワードのTextChangedイベント内でlbtn.Focus()と書いてみましたがダメでした。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-02-22 22:22
考えてみたんですが。
まず「ユーザーID、パスワードを入力したときに・・」とありますがトリガーがありません。のでパスワード入力時にEnterキーをトリガーにチェック後、PostBack or フォーカス移動とか・・・・。

参考になればと思います。

馬岱
常連さん
会議室デビュー日: 2007/12/05
投稿数: 21
お住まい・勤務地: 五丈原
投稿日時: 2008-02-25 09:10
こんにちは。

>ユーザーIDとパスワードのTextChangedイベント内でlbtn.Focus()と書いてみましたがダメでした。

どうダメだったのか具体的に書いて頂けると良いかと思います。
基本的にはユーザーID、パスワードのTextboxにTextChangedもしくはLeaveでイベント発生時に両方が入力されている場合Focusを設定する処理で拾えるとは思うのですが。


_________________
こえ部やめました(つд`)
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-02-25 10:22
引用:

未記入さんの書き込み (2008-02-22 20:17) より:
ユーザーID、パスワードを入力したときにログインボタンにフォーカスを当てるにはどうしたら良いのでしょうか?
ユーザーIDとパスワードのTextChangedイベント内でlbtn.Focus()と書いてみましたがダメでした。


私も仕組みは知らないのですが、普通は、こういうこと(フォーカスを動的に設定すること)はしないのではないだろうかと思います。
インターネット上のシステムをいくつか見てみましたが、アクティブな form で Enter キーを押すと submit ボタンが自動的に押される機能(ブラウザーが持っている機能)を使うか、あるいは、なにか別の方法で Enter キーのキーイベントを捕まえているような感じがします。

どっちかというと「ウェブデザイン」的な話で、プログラマーじゃなくても知っているようなことなのでしょうけど、どうやるんでしょうね?
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-25 10:42
formタグにdefaultbutton=[ボタンコントロールID]の属性を追加すれば
TextBox等一部コントロール上でのEnter押下時に自動でボタン押下するように
動作させることは可能です。

ただ、フォームの標準ボタンは別に存在し
特定のコントロールの場合のみ別ボタンによるポストが必要で有る場合
Enter押下を捕らえ、目的のボタンコントロール.click()を呼び出す必要が
あるかと思います。
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-02-25 11:18
引用:

くまっちさんの書き込み (2008-02-25 10:42) より:
formタグにdefaultbutton=[ボタンコントロールID]の属性を追加すれば
TextBox等一部コントロール上でのEnter押下時に自動でボタン押下するように
動作させることは可能です。

ただ、フォームの標準ボタンは別に存在し
特定のコントロールの場合のみ別ボタンによるポストが必要で有る場合
Enter押下を捕らえ、目的のボタンコントロール.click()を呼び出す必要が
あるかと思います。




ASP.NETの場合、マスターページ上での入力項目も含め、1画面全体がひとつのFORMだと思っていますが合ってますでしょうか?
そうだとすると、意味のあるグループごとにデフォルトで処理させたいボタンが違うと思います。
例えば、ひとつの画面にログインボックスと検索ボタンがある場合、ログインボックスのユーザーID、パスワードを入力した時はログインボタンを押したことにしたいし、検索文字列を入力したときは検索ボタンを押したことにしたいという具合です。
これを実現するためにはくまっちさんのご指摘のようにEnter押下を認識し、処理を振り分ける必要があると思いますが、具体的にはどうすれば良いのでしょうか?

rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-02-25 11:43
例えばこんな感じです。
submitボタンが混じってたらうまくいかないかもしれませんが。

コード:
    <script type="text/javascript">
function clickTargetOnEnter(id){
  var target = document.getElementById(id);
  if(event.keyCode == 13) {
      target.click();
  }
}
    </script>

    <form id="form1" runat="server">
        <div>
            <input id="Text1" type="text" onkeydown="javascript:return clickTargetOnEnter('Button1');" />
            <input id="Text2" type="text" onkeydown="javascript:return clickTargetOnEnter('Button2');" />
            <input id="Button1" type="button" value="button" onclick="javascript:alert('button1');" />
            <input id="Button2" type="button" value="button" onclick="javascript:alert('button2');" />
        </div>
    </form>

未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-02-26 11:22
引用:

rainさんの書き込み (2008-02-25 11:43) より:
例えばこんな感じです。
submitボタンが混じってたらうまくいかないかもしれませんが。

コード:
    <script type="text/javascript">
function clickTargetOnEnter(id){
  var target = document.getElementById(id);
  if(event.keyCode == 13) {
      target.click();
  }
}
    </script>

    <form id="form1" runat="server">
        <div>
            <input id="Text1" type="text" onkeydown="javascript:return clickTargetOnEnter('Button1');" />
            <input id="Text2" type="text" onkeydown="javascript:return clickTargetOnEnter('Button2');" />
            <input id="Button1" type="button" value="button" onclick="javascript:alert('button1');" />
            <input id="Button2" type="button" value="button" onclick="javascript:alert('button2');" />
        </div>
    </form>





ButtonコントロールにはOnClientClickにalert('XXX')と書けたのですが、テキストボックスだとOnClientClickプロパティがありませんでした。
どのようにしたら書けるのでしょうか?

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