3

javascript と asp.net の Enter キーに問題があります。

検索を行う textchanged イベントを使用してこのようなコントロールを持っていますが、ユーザーが入力したときにそれを制御したい

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event)" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" />

そのため、非常にうまく機能するこの JavaScript 関数を作成しました。任意の文字入力で Enter ポストバックを回避するため

    function EnterEvent(e) {
        var keycode = (e.keyCode ? e.keyCode : e.which);
        if (keycode == 13) {
            return true;
        }
        else {
            return false
        }
    }

そして、TextBox にコンテンツが含まれるタイミングを制御したかったので、js を次のように変更しました。

    function EnterEvent(e, ctrl) {
        var keycode = (e.keyCode ? e.keyCode : e.which);
        if (keycode == 13) {
            return ctrl.value.length > 2;
        }
        else {
            return false
        }
    }

制御

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event, this)" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" />

しかし、何も起こりません。私が入力するたびに、ページのポストバック。

ロードページのコードビハインドにもこれを追加しました

            TextBox1.Attributes.Add("onkeypress", "EnterEvent(event, this);");
            TextBox1.Attributes.Add("onkeyup", "EnterEvent(event, this);");
            TextBox1.Attributes.Add("onkeydown", "EnterEvent(event, this);");

私のページはまだ Enter キーでポストバックを行っています。アイデアは、少なくとも 3 文字ある場合に Enter ポストバックを停止することです。アイデアや別のアプローチはありますか?

> -----編集--------------------

EnterEvent の前にこの関数を追加しました

    $(function () {
        $(':text').bind('keydown', function (e) { 
            if (e.keyCode == 13) 
                e.preventDefault();
        });
    });

しかし、それはすべてのページでEnterをブロックします。Enter はまったく機能しません。

> -----編集 2--------------------

よし、成功した!以前のコメントで述べたように、ダミーのボタン コントロールを追加して、テキスト ボックスからイベントを転送し、そのクリック イベントを呼び出すようにしました。まったくきれいではありませんが、機能していて急いでいます。みなさま、回答ありがとうございます。誰かがまだ助けてくれるなら、私はそれを感謝します。この質問のレビューを続けます。ありがとう。

    function EnterEvent(e, ctrl) {
        var keycode = (e.keyCode ? e.keyCode : e.which);
        if (keycode == 13 && ctrl.value.length > 2) {
            $('[id$=Button1]').click();
        }
        else {
            return false;
        }
    }

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event, this)" />
<asp:Button ID="Button1" runat="server" OnClick="TextBox1_TextChanged" style="visibility:hidden;width:0;"/>
4

3 に答える 3

4

Enterキーを押すのを防ぐために同様の必要性がありました(ただし、この場合のように入力の長さの条件を考慮する必要はありませんでした)、これで問題が解決したことがわかりました...必要な場合はスクリプトブロック全体を追加するよりも簡単です誰かがテキスト領域でエンターを押したためにフォームのポストバックを停止します。

<asp:TextBox ID="tb_Input" runat="server" onkeypress="return event.keyCode != 13;"></asp:TextBox>

他の誰かがこの機能のみを探している場合に備えて、これを共有したいと思います。

于 2013-12-12T18:39:46.850 に答える