2014-01-05 137 views
0

我有一個包含多個輸入的表單,爲此我在Ruby on Rails應用程序中進行了實時預覽。實時預覽工作正常,直到預覽帶有現有記錄的表單。更新表單實時預覽的輸入值(Ruby on Rails)

如果沒有創建我的對象,我看到這樣的事情(注意沒有「值」屬性)

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

如果我填寫表格,並將其發送到服務器,輸入「值」的屬性被分配與用戶輸入的值,所以如果我打開窗體源我看到:

<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應用程序,在第一種情況下才會有效(如果未設置值)。在第二種情況下,沒有任何事情發生,價值保持不變。我直接從視圖中複製了我的應用程序的輸入。我使用Rails 4與turbolinks。

回答

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 

和它的作品。