2012-11-01 9 views
6

編集 - 明らかに誰も私を悩ますことは何も考えていません。ページ内の他の場所で行ったことが、送信されているステータス属性をブロックしていることが問題になっていると思います。問題はただ何も見ることができないことです。私は誰かが似たようなものを見て、私が見なければならない場所を示唆してくれることを期待しています。名前に「ステータス」のフォームフィールドを投稿できないのはなぜですか?


私のページには、私のweb-appにデータを投稿するためのダミーフォームがあります。それはRailsで(HAMLを使って)作成されます。

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

これは、次のHTMLを生成します。 DOMにおいて

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

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

を以下のように表示されます。このフォームはそうのような(のCoffeeScriptを使用して)jQueryを使って転記され;

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

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

このパターンは他のアクションでうまく機能しましたが、「請求書[ステータス]」は問題を引き起こしているようです。 jQueryでフォームを送信すると、隠しフィールドは渡されません。私は私のRailsコンソールで次のように見えます。

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

つまり、請求書[status]フィールドはフォームパラメータとともに渡されません。このフィールドの名前を他のものに変更すると、うまく動作します。

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

私のコンソールには次のパラメータがあります。

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

私はそれがRailsのことだとは思わないので、私はChromeの開発ツール上で「ネットワーク」タブを監視している場合、ブラウザの問題であるように思わ同じことが起こって参照してください。 SafariとFirefoxでも同様のことが起こります。

ステータスはブラウザのフォームにある種の魔法の予約語ですか?何が起きてる?

+0

いいえ、予約語はありません。私はそれを試してみました。うまく動作しています。 –

+0

OK、それは私のために働いていません。 – brad

+0

生成されたHTMLフォームを投稿できますか? –

答えて

3

問題を再現できませんでしたが、フォームを送信するときにJavascriptが原因であると思われます。これをデバッグするには、次の操作を行うことができます

  1. オープンページを
  2. クローム
  3. で右「ソース]タブを選択し
  4. を「要素を検査」を選択し、送信ボタンをクリックしてください。
  5. [送信元]タブで、[送信]をクリックしたときに と呼ばれるJavascriptの送信元を見つけます。おそらく、 '要素'タブの下にあるボックスの 十代の右矢印をクリックする必要があります。また、 のコードをすべて削除してコードを作成した場合は、 ページの下部にある「かわいい」中かっこのアイコンをクリックしてください。
  6. 方法が見つかったら、左側の の横にある行番号をクリックします。右ペインには、 「ブレークポイント」セクションの下に表示されます。
  7. ページを再読み込み
  8. [送信]ボタンをクリックします。

これにより、送信アクションで一時停止したJavascriptデバッガが表示され、コードをステップ実行して、実行中の動作を正確に確認することができます。

こちらがお役に立てば幸いです。

+0

素晴らしいです、ありがとうございます。これは私のコードを適切に進めるよう促し、私が呼んでいたのと同じ名前の関数を発見しました。私はそれを数年前に書いていましたが、それを置き換えて、削除したり、忘れたりしませんでした。とにかく、私のフォームが正しく提出されなかったのは、それが原因です。このプロジェクトはこれまでに書いた以上のJavascriptを持っており、トラックを失い始めています。私はJavascriptの論争についていくつかのヒントが必要だと思う! – brad

関連する問題