2017-01-13 2 views
0

Ich habe ein seltsames Problem, bei dem ein Ajax-Formular zweimal eingereicht wird.Warum ist das Ajax-Formular zweimal bei Checkbox-Änderungen einzureichen?

# 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() 

Ein Klick auf die Checkbox, sollte das Formular abzuschicken, aber die Protokolle ein Doppel einreichen mit dem approved zeigt zum Ändern jeder einreichen

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"} 

ich versucht habe, wie unten die JS zu ändern, aber die Doppel-Post weiter:

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

Ich versuche herauszufinden, was die Doppelpost verursacht. Im Chrome-Entwicklerbereich werden auf der Registerkarte "Netzwerk" zwei Post-Ereignisse angezeigt, die in der Initiatorspalte jedoch genau denselben Verlauf aufweisen.

Was könnte diesen Doppelpost verursachen, und was ist ein vernünftiger Ansatz, um dies zu debuggen?

+0

haben Sie versucht, Turbolinks zu deaktivieren? – Milind

+0

danke @Milind Ich denke nicht, dass Turbolinks in dieser App aktiviert ist. Es ist nicht in der application.js manifest oder gemfile –

+0

Unrelated, aber Sie müssen '.each' mit' .addClass() 'nicht verwenden, rufen Sie es direkt auf der Auswahl und es wird auf alles funktionieren. – Barmar

Antwort

0

Versuche Zugabe return false nach oder unter $form.submit() oder preventDefault()

+0

Danke @bxorcloud. Nach dem Hinzufügen dieser Formulare wird das Formular noch zweimal gesendet. \t nach viel Graben, habe ich schließlich zurück zu Switchery, die auf dieser Checkbox aktiviert ist. abpetkov.github.io/switchery Nach dem Deaktivieren von Switchery wird das Formular nur einmal gepostet. Irgendeine Idee, warum Swicthery diese Doppelpost verursachen sollte? –

0

Bei Verwendung hilft dies jemand anderes dieses Problem auftritt, verfolgen ich schließlich das Problem zu Swicthery zurück, die auf diesem Kontrollkästchen aktiviert ist.

Insbesondere diese Seite half, das Problem zu lösen.

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

Simple wickelte das Kontrollkästchen in einem Label-Tag

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

die aus irgendeinem Grund dieser doppelten Eintrag verursacht.

Wie ich simpleform hinzufügen wollte boolean_style: :inline entfernt die Label-Tags entfernt und alles funktioniert jetzt richtig.

Verwandte Themen