3

(ボタンの代わりに) リンクを含むフォームを送信するために使用する次のコードがあります。これは、いくつかの CSS ホバー機能を使用できるようにするためです。

$('a.css_submit').click(submit_form);
$('a.inactive_submit').click(submit_form);

function submit_form(event) {
  if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit'))   {
        $(this).toggleClass("css_submit inactive_submit");
    $(this).parents('form:first').submit();
    return false;
  } else {
    return true;
  }
}

問題は、Internet Explorer がフォームを 2 回送信する場合があることです。問題を自分で再現することはできませんでしたが、実稼働サーバーのログで確認できます。この問題は IE6 ~ IE9 でも発生します。他のすべてのブラウザは正常に動作します。リンクからfalseを返すと言っている投稿を見たことがありますが、私はそうしています。

どんな助けでも大歓迎です。

4

4 に答える 4

2

自分でフォームを作成する場合submit、イベントのデフォルト処理もキャンセルする必要があります。

jquery の方法はevent.preventDefault()次のとおりです。

$(this).parents('form:first').submit();
event.preventDefault();

true/を返すfalseことは、jquery では効果がありません。

于 2014-09-24T15:42:19.370 に答える
0

検証を追加して、2回クリックされないようにすることができます。

var formSubmitted = false;

function submit_form(event) {
  if(formSubmitted  == true) { alert('Form already submitted.'); return false; } // determine if form is already submitted
  if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit'))   {
        $(this).toggleClass("css_submit inactive_submit");
    $(this).parents('form:first').submit();
    return false;
  } else {
    formSubmitted  = true;
    $('a.css_submit').attr('disabled', true); // disable form submit button
    $('a.css_submit').val('Processing...'); // set form submit button text to say processing
    return true;
  }
}
于 2011-09-20T15:13:27.843 に答える