2012-11-01 7 views
6

Edytuj - wyraźnie nikt nie ma pojęcia, co mnie tu dręczy. Myślę, że to tylko kwestia tego, że coś, co zrobiłem gdzie indziej na stronie, blokuje wysyłanie atrybutu statusu. Problem polega na tym, że po prostu nic nie widzę. Mam nadzieję, że ktoś widział coś podobnego i może zasugerować, gdzie muszę wyglądać.Dlaczego nie mogę opublikować pola formularza z "statusem" w nazwie?


Mam postać na mojej stronie, aby opublikować dane w mojej aplikacji internetowej. Jest on tworzony w Railsach (przy użyciu HAML), tak jak;

=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do 
    =hidden_field_tag 'invoice[status]', 'Sent' 

Generuje następujący kod HTML;

<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post"> 
    <div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="&#x2713;" /> 
    <input name="_method" type="hidden" value="put" /> 
    <input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs=" /> 
    </div> 
    <input id="invoice_status" name="invoice[status]" type="hidden" value="Sent" /> 
</form> 

w DOM ta wygląda następująco

<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post"> 
    <div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="✓"> 
    <input name="_method" type="hidden" value="put"> 
    <input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs="> 
    </div> 
    <input id="invoice_status" name="invoice[status]" type="hidden" value="Sent"> 
</form> 

Ta forma jest wysyłany z jquery (przy coffeescript) jak w przykładzie;

jQuery -> 
    $('a.mark-sent').click -> updateBulkInvoices('.mark-sent-form') 

updateBulkInvoices = (form) -> 
    $(form).attr('action', "/bulk_invoices/#{checkedInvoices().get().join()}").submit() 

Ten wzór dobrze mi pasuje do innych działań, ale "faktura [status]" wydaje się powodować problemy. Po przesłaniu formularza z jQuery ukryte pole nie jest przekazywane. Widzę następujące w mojej konsoli Rails;

Parameters: {"utf8"=>"✓", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "id"=>"16"} 

tj. Pole [status] faktury nie jest przekazywane z parametrami formularza. Jeśli zmienię nazwę tego pola na cokolwiek innego, to działa to dobrze, np.

=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do 
    =hidden_field_tag 'invoice[flatus]', 'sent' 

podaje mi następujące parametry w mojej konsoli;

Parameters: {"utf8"=>"✓", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "invoice"=>{"flatus"=>"sent"}, "id"=>"16"} 

widzę to samo dzieje się, jeśli monitorowanie zakładkę „sieć” na temat narzędzi deweloperskich Chrome więc nie sądzę, że jest to sprawa Rails, wydaje się być związany z przeglądarką. Podobnie jest z przeglądarkami Safari i Firefox.

Czy status jest jakimś magicznym zastrzeżonym słowem w formularzach przeglądarki? Co tu się dzieje?

+0

Nie ma takich zarezerwowanych słów, które wypróbowałem i działa dobrze –

+0

OK, to nie działa dla mnie. – brad

+0

Czy możesz opublikować wygenerowany formularz HTML? –

Odpowiedz

3

Nie udało mi się odtworzyć problemu, ale podejrzewam, że jest to spowodowane przez skrypt JavaScript podczas przesyłania formularza. W tym celu debugowania, można wykonać następujące czynności:

  1. otworzyć stronę w Chrome
  2. Right kliknij w przycisk, wybierz „Zbadaj element”
  3. wybrać zakładkę "źródła.
  4. Na karcie źródła znajdź źródło kodu JavaScript o nazwie po kliknięciu przycisku przesyłania. Najprawdopodobniej będziesz musiał kliknąć strzałkę w prawo w polu poniżej, w zakładce "elementy". Ponadto, jeśli kod został ugolony z usuniętymi wszystkimi usuniętymi liniami, możesz kliknąć na ikonkę nawiasów klamrowych "ładny druk" u dołu strony .
  5. Po znalezieniu metody kliknij numer wiersza obok niej po lewej stronie na . W prawym okienku powinno pojawić się ono pod sekcją "Punkty przerwania" .
  6. Załaduj ponownie stronę
  7. Kliknij przycisk przesyłania.

Powoduje przejście do debugera JavaScript zatrzymanego w akcji przesyłania, a następnie można go przejrzeć i zobaczyć, co dokładnie robi.

Mam nadzieję, że to pomoże!

+0

Awesome, thanks. Skłoniło mnie to do tego, by w końcu przejrzeć poprawnie mój kod i odkryłem funkcję o tej samej nazwie, którą nazywałem. Napisałem to przed wiekami, zastąpiłem, nie usunąłem i zapomniałem o tym. W każdym razie to sprawca, że ​​mój formularz nie został prawidłowo złożony. Ten projekt ma więcej skryptów JavaScript niż kiedykolwiek wcześniej i zaczynam tracić poczucie. Myślę, że potrzebuję wskazówek na temat sporów JavaScript! – brad

Powiązane problemy