12

マウスクリックでトリガーできるページに画像ボタンがあります。デフォルトでは、無効にしたいEnterキーを押すとトリガーされます。

asp:Button の "UseSubmitBehaviour" 属性について知っていますが、asp:ImageButton で同じことを行う方法はありますか?

4

8 に答える 8

11

ある種の入力コントロールがあり、ユーザーが誤って Enter キーを押したときに Enter キーを押して自動送信したくないと仮定します。その場合、この動作を無効にする各コントロールに JavaScript onkeypress イベントを添付できます。

function disableEnterKey(e)
{
     var key;
     if (window.event) key = window.event.keyCode; // Internet Explorer
     else key = e.which;

     return (key != 13);
}

// In your aspx file Page_Load do the following foreach control you want to disable
// the enter key for:
txtYourTextBox.Attributes.Add("OnKeyPress", "return disableEnterKey(event);");

Enter キー送信フォームを完全に無効にする必要がある場合。この場合、ページのタグで OnKeyDown ハンドラーを使用し<body>ます。

JavaScript コード:

if (window.event.keyCode == 13) 
{
    event.returnValue = false; 
    event.cancel = true;
} 

JQuery を使用すると、これはよりクリーンで簡単になり、推奨される方法になります。次の拡張機能を作成できます。

jQuery.fn.DisableEnterKey =
    function()
    {
        return this.each(function()
        {
            $(this).keydown(function(e)
            {
                var key = e.charCode || e.keyCode || 0;
                // return false for the enter key
                return (key != 13);
            })
        })
    };

// You can then wire it up by just adding this code for each control:
<script type="text/javascript" language="javascript">
    $('#txtYourTextBox').DisableEnterKey();
</script>
于 2009-11-28T18:36:49.047 に答える
7

コンテンツをasp:Panelに配置する場合、 DefaultButtonプロパティを使用して別のボタンをデフォルトとして設定し、画像ボタンがクリックされないようにすることができます。

<asp:Panel runat="server" ID="pnl_Test" DefaultButton="btn_Test2">
    <asp:ImageButton runat="server" ID="btn_Test1" />
    <asp:Button runat="server" ID="btn_Test2" />
</asp:Panel>

この例では、通常は btn_Test1 がクリックされる場所でEnterキーを押すと、btn_Test2 がクリックされます。

于 2009-12-01T20:51:51.610 に答える
2

フォームは、Enterキーを押すと、ページ上で最初に見つかったボタンを実行します。ImageButtonマークアップの最初のボタンではなくなるようにページをさらに下に移動し、 CSSを使用して適切に配置できる場合は、これで問題が解決するはずです。私は先週まったく同じことを修正しました、そしてこれは私のために働きました。JavaScriptが正しく機能する必要がなかったため、このソリューションを使用しました。

于 2009-12-01T20:34:48.170 に答える
2

Kelsey の回答を使用する (この回答はウィキ化されています)

...しかし、実装する際にはいくつかの点に注意してください。

  1. jQuery をまだ使用していない場合は、単純な古い JavaScript メソッドをお勧めします。その方法を実行する場合は、単に return (keynum != 13) if(true) return true; のようなばかげたことをしないでください。それ以外の場合は false を返します。

  2. コード ビハインドから onkeydown を割り当てる必要はありません。これはマークアップで行うことができ、そうすることでよりクリーンになります。

  3. フォーム全体で Enter キーを無効にしないでください。入力でのみ実行できますが、フォーム全体で実行すると、テキストエリアにキャリッジ リターンを追加できなくなります。

  4. jQuery を使用する場合は、"disableEnterKey" という CSS クラスを追加し、それを無効にするフォーム要素に割り当ててから、準備が整ったドキュメントの $(".disableEnterKey") で Kelsey の jQuery メソッドを呼び出すことをお勧めします。

  5. 答えに完全に同意しなくても、SO の誰とも似たような答えをしないでください。たとえ答えが単純で、おそらく何千人もの人々が同じことをしたとしても. それは「コピー」です。これは、「カッター」または「おしゃべり」であることに似ています...これは悪いことです.

(この質問のスレッドがばかげているため、この回答はコミュニティ ウィキ化されています)

于 2009-12-01T20:19:08.420 に答える
1

代わりに asp:image を使用してください。次に、onclick " javascript:document.getElementById('imageClicked').setAttribute('value', 'true'); document.myform.submit();"に JavaScript コードを配置します。

非表示フィールドの値を (javascript を使用して) 設定し、画像がクリックされたことをサーバー側のコードに伝えます。

document.getElementById('imageClicked').setAttribute('value', 'true');

次に、サーバーでのポストバック処理の最後に、hiddenField の値をリセットします。

document.getElementById('imageClicked').setAttribute('value', 'true');
于 2009-11-29T03:54:02.880 に答える
1

次のリンクを参照してください。これは、すべてのデフォルトのボタン送信の問題で解決できます。 http://weblog.kevinattard.com/2011/08/aspnet-disable-submit-form-on-enter-key.html

于 2012-10-26T08:44:02.470 に答える
1

あなたは次のようなものが欲しい

<form ...>

  <!-- some code here -->

  <button style='display:none' onclick='return false'>here comes the magic</button>

  <button>normal button </button>

</form>
于 2009-12-04T06:46:57.013 に答える
0

このコードを使用してください

<script type="text/javascript" language="javascript">
$(document).ready(function {
    $("#<%=imageClicked.ClientID%>").prop('disabled',true)
});
</script>
于 2016-04-06T06:33:04.180 に答える