为什么我不能在名称中发布带有'status'的表单字段?

时间:2012-11-01 10:15:44

标签: ruby-on-rails forms browser parameters

编辑 - 显然没有人知道这里有什么令我烦恼的事。我认为这只是一个问题,我在页面的其他地方做了一些阻止状态属性发送的事情。问题是我什么也看不见。我希望有人看到类似的东西,并建议我需要看的地方。


我的页面上有一个虚拟表单,用于将数据发布到我的网络应用程序。它是在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"}

即。发票[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"}

如果我监控Chrome开发者工具上的“网络”标签,我发现同样的事情发生了,所以我认为这不是Rails的事情,这似乎是一个浏览器问题。不过,我对Safari和Firefox也有同样的看法。

状态在浏览器表单中是某种神奇的保留字吗?这是怎么回事?

1 个答案:

答案 0 :(得分:3)

我无法重现该问题,但我怀疑它是由提交表单时的Javascript引起的。要对此进行调试,您可以执行以下操作:

  1. 在Chrome中打开该页面
  2. 右键单击提交按钮,选择&#39;检查元素&#39;
  3. 选择&#39;来源&#39;标签。
  4. 在sources选项卡中,找到要调用的Javascript的源代码 当您单击提交时。您可能需要点击 在&#39;元素下面的框中的右箭头&#39;标签。另外,如果 代码已被删除,删除了所有换行符,你可以 点击“漂亮的印刷品”&#39;底部的花括号图标 页。
  5. 找到方法后,点击旁边的行号 剩下。在右侧窗格中,您应该看到它出现在 &#34;断点&#34;部分。
  6. 重新加载页面
  7. 点击提交按钮。
  8. 这会让你进入在提交操作上暂停的Javascript调试器,然后你可以逐步完成代码,看看它到底在做什么。

    我希望这有帮助!