2012-11-01 21 views
6

編輯 - 顯然沒有人知道什麼讓我興奮。我認爲這只是我在頁面中的其他地方做過的事情,它阻止了正在發送的狀態屬性。問題是我什麼都看不到。我希望有人看到類似的東西,並可以建議我需要看的地方。爲什麼我不能在名稱中發佈'狀態'的表單域?


我在我的頁面上有一個虛擬表單來發布數據到我的網絡應用程序。它是在Rails(使用HAML)中創建的;

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

這將生成以下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> 

在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="✓"> 
    <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> 

這種形式的張貼與jquery(使用的CoffeeScript)像這樣;

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

即發票[狀態]字段不與表單參數一起傳遞。如果我將該字段的名稱更改爲其他任何內容,它都可以正常工作,例如

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

我看到同樣的事情發生,如果我監控Chrome的開發者工具的「網絡」選項卡,所以我不認爲這是一個Rails的東西,這似乎是一個瀏覽器的問題。儘管如此,我也對Safari和Firefox也有同樣的看法。

在瀏覽器窗體中是狀態某種神奇的保留字嗎?這裏發生了什麼?

+0

不,沒有這樣的保留字我試過了,它的工作正常 –

+0

好的,它不適合我。 – brad

+0

你能發佈生成的HTML表單嗎? –

回答

3

我還沒有能夠重現該問題,但我懷疑它是由Javascript提交表單時造成的。要調試這一點,你可以做到以下幾點:

  1. 打開的頁面在Chrome
  2. 右鍵單擊提交按鈕,選擇「檢查元素」
  3. 選擇「源」選項卡。
  4. 在sources選項卡中,單擊submit時,找到名爲 的Javascript的源代碼。您可能必須點擊「元素」標籤下方框中的 teensy右箭頭。另外,如果 代碼已被刪除,並且刪除了所有換行符,則可以點擊 頁面底部的「漂亮打印」大括號圖標。
  5. 一旦找到方法,請單擊左側的 旁邊的行號。在右窗格中,您應該看到它出現在 「斷點」部分下。
  6. 重新加載頁面
  7. 單擊提交按鈕。

這應該會讓你進入暫停在提交動作中的Javascript調試器,然後你可以逐步瀏覽代碼,看看它在做什麼。

我希望這有助於!

+0

太棒了,謝謝。這促使我最終正確地瀏覽了我的代碼,並且發現了一個與我所調用的名稱相同的函數。我很久以前就寫過,取而代之,並沒有刪除它,並且忘記了它。無論如何,這是我的表單沒有正確提交的罪魁禍首。這個項目擁有比以前寫的更多的Javascript,並且我開始失去追蹤。我想我需要一些關於Javascript拼寫的提示! – brad

相關問題