更新表单实时预览的输入值(Ruby on Rails)

时间:2014-01-05 13:00:08

标签: jquery forms dom ruby-on-rails-4 turbolinks

我有一个包含多个输入的表单,我在Ruby on Rails应用程序中有实时预览。实时预览工作正常,直到预览具有现有记录的表格。

如果我的对象没有创建,我会看到类似的东西(注意没有“value”属性)

<input class="deal_title" id="deal_title" name="deal[title]" type="text">

如果我填写表单并将其发送到服务器,则输入“value”的属性将被分配用户输入的值,因此如果我打开表单源,我会看到:

<input class="deal_title" id="deal_title" name="deal[title]" type="text" value="New offer">

我有一个绑定实时预览的脚本:

  $("#new_deal input").keyup ->
    css_klass = $(this).attr("class")
    $(this).attr('value', $(this).val())
    inpt = $(this).val()
    $("." + css_klass + "_preview").html inpt

如果我在JsFiddle中重现它,它可以正常工作:

JsFiddle without "value"

JsFiddle with "value"

但是在我的Rails应用程序中,这只适用于第一种情况(如果没有设置值)。在第二种情况下,没有任何事情发生,价值保持不变。我直接从视图中复制了我的应用中的输入。我使用带有turbolink的Rails 4。

1 个答案:

答案 0 :(得分:0)

我自己找到了答案!

这是因为rails根据操作将自定义ID应用于表单。如果是“新”操作,那么ID将是“new_object”。如果是“编辑”操作,那么类将是“edit_object”。

我应用了自定义类:

<%= form_for(@deal, html: { "data-abide" => '', id: "deal_form"}, builder: SmartLabelFormBuilder) do |f| %>
...
<% end %>

$("#deal_form input").keyup ->
    css_klass = $(this).attr("class")
    $(this).attr('value', $(this).val())
    inpt = $(this).val()
    $("." + css_klass + "_preview").html inpt

它有效。