2017-01-13 25 views
0

ajaxフォームが2回送信されているときに奇妙な問題が発生しています。チェックボックスにAjaxフォームが2回送信されるのはなぜですか?

# view 
<%= simple_form_for user, remote: true do |f| %> 
    <%= f.input :approved, 
    as: :boolean, 
    input_html: { class: 'submit-on-select' } %> 
    <%= f.submit %> 
<% end %> 

# js 
$("input:checkbox.submit-on-select").each -> 
    $(this).closest('form').find('input[type="submit"]').each -> 
    $(this).addClass('hidden') 
    $("input:checkbox.submit-on-select").on 'change', -> 
    $form = $(this).closest('form') 
    $form.submit() 

フォームを提出する必要があり、チェックボックスをクリックすると、まだログが、私は以下のようにJSを変更しようとしている

Started PATCH "/en/users/23" for 127.0.0.1 at 2017-01-13 07:25:40 +0700 
Processing by UsersController#update as JS 
    Parameters: {"utf8"=>"✓", "user"=>{"approved"=>"0"}, "locale"=>"en", "id"=>"23"} 
Started PATCH "/en/users/23" for 127.0.0.1 at 2017-01-13 07:25:40 +0700 
Processing by UsersController#update as JS 
    Parameters: {"utf8"=>"✓", "user"=>{"approved"=>"1"}, "locale"=>"en", "id"=>"23"} 

それぞれ提出するために、二重が変化approvedに提出示したが、ダブルポストされています続行:

... 
$form.unbind('submit').submit() 

私はダブルポストの原因を突き止めようとしています。 Chromeデベロッパーパネルでは、ネットワークタブに2つのポストイベントが表示されますが、どちらもイニシエーター列にまったく同じトレースがあります。

このダブルポストを引き起こす原因は何か、これをデバッグするには賢明なアプローチはありますか?後または$form.submit()return falseか、これはこの問題が発生して他の誰を助け場合preventDefault()

+0

Turbolinksを無効にしましたか? – Milind

+0

ありがとう@Milind私はturbolinksがこのアプリで有効になっているとは思わない。 application.jsマニフェストやgemfileにはありません –

+0

関連していませんが、 '.each'を' .addClass() 'と一緒に使う必要はありません。 – Barmar

答えて

0

てみてください、私は最終的にこれらのチェックボックスで有効になって戻ってSwictheryに問題をトレースします。

特に、このページはこの問題の解決に役立ちました。

https://github.com/abpetkov/switchery/issues/50

Simpleformは、ラベル、タグ、何らかの理由で、この二重の投稿を原因と

<label><input type="checkbox"></label> 

のチェックボックスを包むました。

シンプルフォームを維持したかったので、boolean_style: :inlineがラベルタグを削除したので、すべて正しく動作しています。

+0

ありがとう@bxorcloud。これらを追加すると、フォームはまだ2回送信されます。 \t 多くの掘り出しの後、私は最終的にこのチェックボックスで有効になっているSwitcheryに戻ってきました。 abpetkov.github.io/switchery Switcheryを無効にした後、フォームは1回だけ転記されます。 Swictheryがなぜこの二重の投稿を引き起こすべきなのか? –

0

を使うの追加

関連する問題