1

非表示の送信ボタンと 1 つのテキスト入力を備えたフォームがあります。テキスト入力では、jQuery i を使用して、フォームを送信する変更イベントが添付されています。問題は、入力時にEnterキーを押すと、フォームが2回送信されることです。入力がフォームを送信し、入力が変更イベントを検出してフォームを再度送信するためだと思います。2 つの質問があります: - 私の考えは正しいですか? - どうすれば修正できますか?

これはJavaScriptです:

$("input.price").live('change', function () {
  $(this).closest('form').submit();
});

編集: e.preventDefault() はイベント「変更」のデフォルトを妨げていると思いますが、イベント「送信」を妨げていません..イベント「変更」の前にこれを試してみましたが、運が悪いかもしれませんが、解決策に近いかもしれません:

$("input.price").live('submit', function (e) {
       e.preventDefault();
});
4

4 に答える 4

1

ここで何が欠けていますか、代わりにこれをしないのはなぜですか:

$("input.price").live('change', function (eventObject) {
     $(this).closest('form').submit();
 });
于 2013-03-12T20:50:46.273 に答える
1
$("input.price").live('change', function (eventObject) {
     eventObject.preventDefault();
     $(this).closest('form').find('input.submitButton').click();
 });
于 2013-03-12T20:47:43.167 に答える
1

preventDefault()フォームが送信されないようにするには、関数を使用する必要があります。

例えば

$("input.price").live('change', function (e) {
  e.preventDefault();
  $(this).closest('form').find('input.submitButton').click();
});
于 2013-03-12T20:48:30.543 に答える
0

最後に、私は解決策を見つけました!問題は、Mike C. が言うように、追加のコードが問題の解決に役立つ可能性があるということでした。問題は、私が送信しようとしているフォームが MVC の Ajax.BeginForm であることでした。主な問題は、そのフォームの ajax 送信です。これは 2 回目の送信です。

私はその動作を変更できませんでした.. Ajax.Beginform を Html.Beginform で変更するだけです.. 私がしたくないこと。だから..私はこの「さびた」解決策を思いついた:

$("input.price").live('keypress', function (e) {
     if (e.keyCode == 13) {
        $(this).attr('data-submitting', true);
     }
});

$("input.price").live('change', function (e) {
     if (!$(this).attr('data-submitting')) {
         $(this).closest('form').submit();
     }
});
于 2013-03-13T22:05:45.443 に答える