我有一个包含多个输入的表单,我在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中重现它,它可以正常工作:
但是在我的Rails应用程序中,这只适用于第一种情况(如果没有设置值)。在第二种情况下,没有任何事情发生,价值保持不变。我直接从视图中复制了我的应用中的输入。我使用带有turbolink的Rails 4。
答案 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
它有效。