2

私の基本的な質問は、javascript でボタンのクリックをシミュレートする方法です。

document.getElementById("btnSubmit").click(); を使用する必要があることはわかっています。しかし、これは onClientClick JavaScript 関数も呼び出していないようです。

環境:

C# と JavaScript で ASP.NET を使用しています。

何が起こったのか: 入力テキスト領域があり、送信ボタンを有効にする前にユーザーが文字を入力する必要があることを確認したいです。onkeypress="validateTxt();" でこれを行うことができました 次に、この関数を呼び出しました

 function validateTxt() {
    var input = document.getElementById("<%=txtUserName.ClientID %>").value;
    //Need a min of 3 characters
    if(input.length > 1)
    {
        document.getElementById("btnSubmit").disabled = false;
    }
    else
    {
        document.getElementById("btnSubmit").disabled = true;
    }
}

唯一の問題は、バックスペースを登録しないことです。

これを解決するために、私はこれをオンラインで見つけました

<script type="text/javascript">
       document.getElementsByName('txtUserName')[0].onkeydown = function (event) {
        if (event === undefined) event = window.event; // fix IE 
        if (event.keyCode === 8)
         validateTxt();
        if (event.keyCode === 13) {
            document.getElementById("btnSubmit").click();
        }
        }; 

ユーザーがバックスペースを押すたびに、JavaScript 関数が呼び出されます。これは、テキスト領域からEnterキーを押してもJavaScript関数が呼び出されないことがわかるまではうまくいきました。

ここに関連するすべてのコードがあります...

    <script type="text/javascript">
function InformUser()
{
    window.document.getElementById("loadingMessageDIV").style.display = "block";
   <%=Page.GetPostBackEventReference(btnSubmit as Control)%>
    document.getElementById("btnSubmit").disabled = true;
}

function validateTxt() {
    var input = document.getElementById("<%=txtUserName.ClientID %>").value;
    //Need a min of 3 characters
    if(input.length > 1)
    {
        document.getElementById("btnSubmit").disabled = false;
    }
    else
    {
        document.getElementById("btnSubmit").disabled = true;
    }
}

</script>

ここにテキストエリア+ JavaScriptバウンディング機能があります

<asp:TextBox ID="txtUserName" runat="server" Font-Size="11pt" onkeypress="validateTxt();"></asp:TextBox>
            <script type="text/javascript">
                //We bind the textbox to this function and whenever the backspace key is pressed it will validateTxt
                document.getElementsByName('txtUserName')[0].onkeydown = function (event) {
                    if (event === undefined) event = window.event; // fix IE 
                    if (event.keyCode === 8)
                        validateTxt();
                    if (event.keyCode === 13) {
                        document.getElementById("btnSubmit").click();
                    }
                }; 
            </script>

送信ボタンはこちら

<asp:Button ID="btnSubmit" runat="server" OnClientClick="InformUser();" OnClick="btnSubmit_Click"
                            Text="Login" Font-Bold="True" Enabled="True" />
                        <script type="text/javascript">
//Disable the button until we have some actual input
                            document.getElementById("btnSubmit").disabled = true;
                        </script>

要約すると、ボタンを押しますが、無効にすることもできません。ユーザーがEnterキーを押してからボタンを押したときにInformUserを直接呼び出そうとしましたが、それもうまくいきませんでした。

javascript関数をテキスト領域にバインドする方法と関係があることはわかっています。これを取り出すと機能するからです。

助けてくれてありがとう

4

1 に答える 1

0

あなたが本当にやろうとしているのがテキストエリアのテキストの量に基づいて送信ボタンを有効/無効にすることであるなら、それが変更されるたびに長さをチェックするだけで最も簡単でしょう。

jQueryを使用できますか?可能であれば、jQueryがキーボードイベントを正規化するため、さまざまなブラウザがさまざまなイベントを発生させることを心配する必要がないため、これは些細な問題です。

簡単な実験として、次のHTMLを使用してjsFiddleを作成しました。

<textarea id="txt"></textarea>
<label id="count" />

そしてこのJavaScript:

$('#txt').keyup(function () {
    $('#count').text($('#txt').val().length);
});

すべてのキーアップで(テキストが変更された後にキーアップが発生するため、キーダウンやキープレスではなくキーアップを使用しました)、長さが更新されます。これは、通常のキー、バックスペース、削除、入力などを登録し、FFおよびIE8で機能します。

あなたの場合、あなたは明らかに送信ボタンを有効/無効にするために機能を変更するでしょう。

于 2012-05-22T17:01:22.327 に答える