2

メンバー ログイン用のフォームを含む Web サイト マスター ページを作成しています。以下は、マスター ページのマークアップです。

<form id="loginForm" action="account.aspx" method="POST">
<div class="div-topHead">
<input type="button" id="submitLogin" title="Login" value="Login" />
<input type="button" id="forgetPW" title="Forget password" value="?" onclick="window.open('forgetpassword.aspx','_self')" />
</div>
<div class="div-topTail">
<div class="div-login">
    <div class="row-body row-def">
    <input id="input_memID" name="input_memID" runat="server" type="text" maxlength="255" />
    </div>
    <div class="row-header row-def">
    Member ID:
    </div>
</div>
<div class="div-login">
    <div class="row-body row-def">
    <input id="input_memPW" name="input_memPW" runat="server" type="password" maxlength="255" />
    </div>
    <div class="row-header row-def">
    Password:
    </div>
</div>
</div>
</form>

以下は投稿スクリプトです

$(function(){
    $('#submitLogin').click(function(){
        var f = $('#loginForm').get(0);
        $.post("../script/loginCheck.aspx", { "memID": f.inputID.value, "memPW": f.inputPW.value }, function(data){
            var result = JSON.parse(data);
            if(result[0] == 1){
                //Login validated
                f.submit();
            } else {
                //Login is invalid
                alert(result[1]);
            }                    
        });
    });
});

問題は、ブラウザーで Web サイトを開くと、テキスト入力フィールド名にプレフィックス "c100$" が自動的に追加され、コンソールから次のエラー Uncaught TypeError: Cannot read property 'value' of undefined が表示されることです。

私はこれが何が起こっているのかをネットで調べようとしましたが、.NET が自動的に行うことのようです。それでも、投稿スクリプトを機能させる方法が見つかりませんでした。

ct100なしのIDのままにしておく必要はありません。投稿スクリプトが機能する限り、 f.ct100$input_memID などに変更しようとしましたが、機能しませんでした

また、 clientIDMode="Static" を試しましたが、ブラウザが clientIDMode が <% PAGE %> の属性ではないというエラーを表示して動作しません。

それで、誰かが私に何ができるか親切にアドバイスしてもらえますか?前もって感謝します!

4

4 に答える 4

3

ClientIDModeは、個々のコントロールに追加できるプロパティです 。

さらに(MSDNから):

サイトの Web.config ファイルで pages 要素を設定することにより、Web サイトのすべてのページに ClientIDMode 値を設定できます。@ Page ディレクティブで、ページの ClientIDMode 値を設定できます。

これは例えば:

<div id="dvDiv" runat="server" clientidmode="Static" />

クライアント側とサーバー側の両方で div の名前を「dvDiv」にします。

したがって$("#dvDiv")、クライアント側で正常に動作します。

最後の発言については、必ず入れてください<%@ Page %> (記号に<% Page %>注意して@ください)

于 2013-01-07T11:23:21.557 に答える
0

このjqueryセレクターを使用して、必要な要素を簡単に取得できます:-

$("[id$='yourElementID']")// Select an Element whose ID ends with yourElementID

例 :-

 $("[id$='submitLogin']").click(function(){
        var f = $("[id$='loginForm']").get(0);
     ....................

詳細情報はこちら

于 2013-01-07T11:33:18.740 に答える
0

Blachshma の答えは完全に合理的であり、問​​題を解決しますrunat="server"が、入力の属性を単純に削除することをお勧めします。

HtmlInputTextページのコード ビハインドからそれらを参照する必要がない場合、これらをオブジェクトとして存在させる本当の理由があるとは思えません。

編集: コメントによると、コード ビハインドからそれらにアクセスする必要がある場合は、単純に ClientIDMode を Static に変更することをお勧めします。

于 2013-01-07T11:33:24.693 に答える
0

Javascript コードが aspx マークアップ内に含まれている場合は、次を使用することもできます

var f = $('#<%= loginForm.ClientID %>').get(0);
于 2013-01-07T11:33:46.497 に答える