5

フォーム内にテーブルがあります。テーブルにはいくつかのフォーム フィールドが含まれていますが、テーブルの外にもフォーム フィールドがあります (ただし、フォーム内にはあります)。

Enter と Return は伝統的にキーボードからフォームを送信するために使用されていることは知っていますが、テーブル内のフィールドに対してこの動作を停止したいと考えています。たとえば、テーブル内のフィールドにフォーカスして Enter キーを押しても、何も起こりません。テーブルの外側(ただしフォーム内)のフィールドにフォーカスすると、通常どおり送信されます。

このテーブルを対象とする jQuery プラグインがあります。簡単に言うと、これは私がこれまでに試したことです:

base.on('keydown', function(e) {
    if (e.keyCode == 13) {
        e.stopPropagation();
        return false;
    }
});

baseテーブル jQuery オブジェクトはどこにありますか。これは私のプラグインのinitメソッド内にあります。ただし、Enter キーを押すと、引き続きフォームが送信されます。

どこが間違っていますか?

編集:いくつかの簡略化された HTML:

<form method="" action="">
  <input type="text" /><!--this should still submit on Enter-->
  <table>
    <tbody>
      <tr>
        <td>
          <input type="text" /><!--this should NOT submit on Enter-->
        </td>
      </tr>
    </tbody>
  </table>
</form>
4

6 に答える 6

9
base.keypress(function(e) {
    var code = e.keyCode || e.which;
    if(code == 13)
        return false;
});

または入力のみの場合:

$(':input', base).keypress(function(e) {
    var code = e.keyCode || e.which;
    if(code == 13)
        return false;
});
于 2012-04-25T09:43:53.767 に答える
3

フォーム要素が送信イベントを発生させると推測します。テーブルを介してフォームにバブルアップすることはありません。次の手順を試してください。

$('input, select, textarea', base).on('keydown', function(e) {
    if (e.keyCode == 13) {
        return false;
    }
});

セレクターにもコンテキストを提供しているため、これkeyDownはテーブル内の要素(必要に応じて変更)でのみ発生することに注意してください。

gordanが別のコメントで言ったように、returnfalseは両方.preventDefault()を行います.stopPropagation()

于 2012-04-25T09:42:23.057 に答える
2

e.preventDefault()ではなくe.stopPropagation()。stopPropagationは、上位のDOMノードへのバブリングを停止するだけで、デフォルトのアクションを妨げることはありません。

于 2012-04-25T09:42:22.327 に答える
1

この Q/A は、複数のフォームを持っていて入力しても、私が望んでいたことをしないという同様の状況を整理しようとしていることがわかりました。私の特定のケースでは、新しい<div id="D1">D1、D2、D3 などを動的に追加し、新しい div ごとに、それを作成したのと同じ php コードからその div をリロードするフォームがあり、POST のみを使用します。

無関係な最初の問題は、各 div で新しい関数を動的に作成できなかったため、D1 などの記述子を引数として Javascript 関数に渡したことです。

<script type="text/javascript">
function formSubmit ( divid ) {
    // post data
    event.preventDefault();
    $.post( "make-my-form-div.php", 
            $("#form"+divid).serialize(), 
            function(data){
                $("#"+divid).html(data);
            });
    return false;
}
</script>

必要条件が表示され、このスレッドの回答で機能しますevent.preventDefault();return false;それは私にはうまくいきませんでした。いずれかのフォームで送信をクリックすると、その 1 つの div が正しいデータでリロードされます。Enter キーを押すと、デフォルトのアクションが発生し、ページ全体がリロードされ、1 つの div だけが残ります。

この回答はうまくいきました。さまざまなフォームに一意の ID と名前が必要でした。最初はそうでし<INPUT TYPE="button" VALUE="Submit" onClick="formSubmit('<?php echo $divid ?>');">たが、「formD1」などの一意のIDと名前を追加すると、すべて正しく機能するようになりました。

于 2014-06-03T07:42:19.807 に答える
0

これは私にとってはうまくいきます。

$("input[type='text']").on('keypress', function(e) { return e.keyCode != 13; });
于 2014-06-20T10:13:33.040 に答える