2

IE でかなり奇妙な動作に気付きました。

入力テキスト フィールドが 1 つと送信ボタンがある HTML フォームがあります。

[送信] をクリックすると、必要な処理を行うクライアント側の JavaScript 関数を実行する必要があります。

テキストフィールドでのポストバックを防止したいとき(Enterキーを押したとき)。

次のようなキー プレス JavaScript 関数を追加しました。

<input type=text onkeypress="return OnEnterKeyPress(event)" />

 function OnEnterKeyPress(event) {
            var keyNum = 0;
            if (window.event) // IE
            {
                keyNum = event.keyCode;
            }
            else if (event.which) // Netscape/Firefox/Opera
            {
                keyNum = event.which;
            }
            else return true;  
            if (keyNum == 13) // Enter Key pressed, then start search, else do nothing.
            {
                OnButtonClick();
                return false;
            }
            else
                return true;
        }

奇妙なことに、これは機能しません。


しかし、テキストフィールドを関数に渡すと:

<input type=text onkeypress="return OnEnterKeyPress(this,event);" />

 function OnEnterKeyPress(thisForm,event) {
            var keyNum = 0;
            if (window.event) // IE
            {
                keyNum = event.keyCode;
            }
            else if (event.which) // Netscape/Firefox/Opera
            {
                keyNum = event.which;
            }
            else return true;  
            if (keyNum == 13) // Enter Key pressed, then start search, else do nothing.
            {
                OnButtonClick();
                return false;
            }
            else
                return true;
        }

ポストバックを防ぐことができます。

ここで正確に何が起こっているかを誰かが確認できますか?

HTML フォームには、テキスト ボックスと送信ボタンが 1 つだけあります。

送信時に実行された JavaScript 関数の結果の出力は、別の div の HTML テキスト領域に表示されます。

4

5 に答える 5

8

この問題の回避策を見つけました。

IEで、フォームに1つのテキストフィールドと1つの送信ボタンしかない場合、フォーム送信でEnterキーを押すと結果が表示されることがわかりました。ただし、複数のテキストボックスがある場合、IEはEnterキーを押してもフォームを自動ポストバックせず、代わりにボタンのonclickイベントを発生させます。

だから私はフォームに隠しテキストフィールドを導入し、すべてが魔法のように機能します。テキストフィールドのonkeypressイベントを処理する必要もありません。

<Form>
    <input type="text" />
    <input type="text" style="display:none"/>
    <input type="submit" onClick="callPageMethod();return false;"/>
</Form>

これは私にとって完璧に機能します!!

Enterキーを直接押すと、送信ボタンのonclickイベントが呼び出されるため、これはFFでは問題になりません。

于 2009-04-17T02:22:09.713 に答える
1

こんにちは、デフォルトの動作を無効にすることもできます。

jQuery('#yourInput').keydown(function (e) {
  if (e.keyCode == 13) {
    e.preventDefault();
  }
});

乾杯!

于 2010-07-22T21:34:57.577 に答える
0

少なくとも IE 7 および 8 に関連する観察のために、ここに来ました。

フォームに 1 つのテキスト入力と 1 つの送信ボタンしかなく、ユーザーがリターン キーを押した場合、IE は送信ボタンの名前と値のペアを要求に含めません。代わりに、テキスト入力の値のみが存在します。

別のテキスト入力を追加すると、テキスト入力と送信ボタンのパラメーターの両方が投稿されます。2 番目のテキスト入力を非表示にすることもできます。<input type="text" style="display:none"/>

したがって、これはイベントに関連するものではなく、単純なフォームの送信に関連するものです。

GET と POST で発生します。フォームに select 要素を追加しても、動作は変わりません。 - 非常に奇妙な。

于 2010-06-03T14:00:17.120 に答える
0

投稿していない他のコードと何らかのやり取りが必要です。あなたのコードは、両方のバリアントでフォームの送信を停止しますが、そうすべきではない理由はありません。

しかし、Enter キーの押下をトラップすることは適切に行うのが難しく、他の何よりもイライラする可能性があります。ほとんどの場合、より良い方法があります。

たとえば、altCognito が示唆するように、「form.onsubmit」が false を返すようにして、ユーザーの操作に応答してフォームが送信されないようにします。また、ボタンの onclick の代わりに onsubmit ハンドラーに AJAX コード (これを行っていると仮定) を配置すると、Enter キーを押すと送信ボタンをクリックするのと同じ効果が得られるようにすることもできます。ユーザーは通常期待するかもしれません。

それが望ましくない場合は、 <form> 要素を含める理由はまったくないようです。ブラウザーが入力要素をどこにも送信しないと思われる場合は、入力要素を単独で配置することは完全に有効です。

于 2009-04-16T15:40:37.853 に答える
0

javascript を介してフォームを送信するために使用される onsubmit で false を返します。

于 2009-04-16T14:53:36.277 に答える