- PR -

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

投稿者投稿内容
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-26 11:44
デザイナからではなく、コード表示にしてTextBoxのタグ中に
rainさんの提示コードの様に
onkeydown="javascript:return clickTargetOnEnter('Button1');"
と記述してください。
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-02-26 12:04
引用:

くまっちさんの書き込み (2008-02-26 11:44) より:
デザイナからではなく、コード表示にしてTextBoxのタグ中に
rainさんの提示コードの様に
onkeydown="javascript:return clickTargetOnEnter('Button1');"
と記述してください。



「onkeydownはTextBoxの有効なプロパティではありません」というエラーになってしまいます。
rainさんのコードはINPUTですが私が書いているのはTextBoxです。
この違いがあるのではないでしょうか?
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-26 12:20
Page_Loadなどで
コード:
TextBoxオブジェクト.Attributes.Add("onkeydown", "javascript:return clickTargetOnEnter('Button1');")


と、してみてください。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-02-26 12:54
マスターページを使った構成だともう少し工夫がいると思いますが、
参考になるとは思うので貼っておきます。

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

    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server" onkeydown="javascript:return clickTargetOnEnter('Button3');"></asp:TextBox>
            <asp:TextBox ID="TextBox2" runat="server" onkeydown="javascript:return clickTargetOnEnter('Button4');"></asp:TextBox>&nbsp;
            <asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="javascript:alert('button3');" />
            <asp:Button ID="Button4" runat="server" Text="Button" OnClientClick="javascript:alert('button4');" /><br />
            <asp:Label ID="Label1" runat="server" ForeColor="Red"></asp:Label>
        </div>
    </form>



コード:
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Me.Request.Form("Button3") IsNot Nothing Then
            Label1.Text = "Button3が押されました"
        ElseIf Me.Request.Form("Button4") IsNot Nothing Then
            Label1.Text = "Button4が押されました"
        End If

    End Sub



「onkeydownはTextBoxの有効なプロパティではありません」という警告が出ますが、
ビルドはできる&雰囲気は感じ取れると思うのでそのままにしてあります。
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-02-26 15:11
rainさんのサンプル+くまっちさんのコードで実現できました。
ありがとうございます。

マスターページで使用するために更に質問がありますので教えてください。

ログインボックスはマスターページに設置してあるので、ログインボタンは次のような展開になっていました。

<input type="submit" name="ctl00$LoginCtrl1$LoginView1$Login1$LoginButton" value="ログイン" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$LoginCtrl1$LoginView1$Login1$LoginButton&quot;, &quot;&quot;, true, &quot;ctl00$ctl00$Login1&quot;, &quot;&quot;, false, false))" id="ctl00_LoginCtrl1_LoginView1_Login1_LoginButton" />


そこで、ユーザーIDとパスワードに次のようにして適用しました。
Dim login1 As Login = TryCast(LoginView1.FindControl("Login1"), Login)
Dim UserName As TextBox = TryCast(login1.FindControl("UserName"), TextBox)
UserName.Attributes.Add("onkeydown", "javascript:return clickTargetOnEnter('ctl00_LoginCtrl1_LoginView1_Login1_LoginButton');")

Dim Password As TextBox = TryCast(login1.FindControl("Password"), TextBox)
Password.Attributes.Add("onkeydown", "javascript:return clickTargetOnEnter('ctl00_LoginCtrl1_LoginView1_Login1_LoginButton');")

一応動いたのですが次の疑問が浮かびました。

1.指定するのはnameの"ctl00$LoginCtrl1$LoginView1$Login1$LoginButton"のほうが正しいのではないか?

2.この名称(nameまたはID)はどの画面でも同じなのか?

です。
ご教授、よろしくお願いします。

くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-26 15:40
1.いえ、IDの方を指定すべきです。理由は2.とも関連してきます。

2.画面により違ってくる場合がありますので固定と捕らえてはいけません。

マスターページなど使用している場合など
デザイナ上でのIDと実際にクライアントに出力されるIDとで違う場合が在ります。
(IDの重複を避ける為、ASP独自の命名規則に従い親コントロールのIDが子に付与されます)

どうするのが良いのかといいますと・・・
コード:

TextBoxオブジェクト.Attributes.Add("onkeydown", _
string.Format("javascript:return clickTargetOnEnter('{0}');", Me.Button1.ClientID))


などの様に、オブジェクト.ClientIDにてクライアントに出力される実際のIDを使い
JavaScriptを出力すべきです。

1.の質問に戻りますが、この為にNameではなくIDで指定すべきなのです。

[補足]
HTMLの仕様上、タグに付けるIDはドキュメント中、唯一である必要があり
Nameは複数存在してもよいものとされています。
getElementById()とgetElementByName()の戻す値が違う理由でもあります。

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-26 15:50 ]
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-02-26 16:25
ありがとうございます。
納得できました。
ソースの方もIDをベタ打ちせずにすみました。

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