2012-04-19 52 views
0

我在edit.html.erb頁面下面的表格Ruby on Rails的jQuery的按鈕,然後單擊填充text_field

<%= form_for(@device) do |f| %> 

    <%= render 'shared/error_messages', :object => f.object %> 

    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :description %> 
    <%= f.text_area :description, :rows => "5" %> 

    <%= f.label :device_identifier %> 
    <%= f.text_field :device_identifier, :value => @device.device_identifier, :readonly => true, :class => "d-id", :id => "deviceIDfield" %> 


    <%= button_tag "New device identifier", :id => "deviceIDbutton", :class => "btn btn-small btn-inverse", :type => "button" %> 

    <%= f.submit "Save changes", :class => "btn btn-large btn-primary", :id => "white" %> 
<% end %> 

當上「新設備標識符」點擊我想要的:device_identifier場再生它的價值目前通過Ruby方法SecureRandom.urlsafe_base64進行設置。這只是生成一個隨機的base64編碼的字符串。我一直試圖通過jQuery來做到這一點,然而由於我是Ruby on Rails和JQuery的新手,所以遇到了麻煩。

我設置了一個名爲shared.js.erb的文件,它位於我的javascripts目錄中。在這裏,我有以下代碼...

$(document).ready(function(){ 
$('#deviceIDbutton').click(function() { 
    $("#deviceIDfield").val('<%= SecureRandom.urlsafe_base64 %>'); 
    }); 
}) 

這工作我第一次單擊該按鈕(即它與一個新的字符串更新device_identifier場),但是停止後,這方面的工作。我認爲這是因爲SecureRandom.urlsafe_base64被調用一次(當文檔準備好時?),而不是每次單擊該按鈕。有人可以幫助我嗎!,我一直對此感到頭痛太久。

我很不確定一些事情,比如爲什麼我不需要使用:remote => true在任何地方,如果我要用它來放置它?

此外,我並不確定我對jQuery應該去哪裏有正確的想法,儘管它似乎可以在我創建的shared.js.erb文件中工作,但如果某些人可以推薦更好/更自然的方式,這將是偉大的。

還值得一提的是,我在我的new.html.erb文件中有同樣的按鈕,我想要應用相同的功能。

非常感謝!

回答

0

正如你所說的,正在生成隨機字符串只有一次,而不是在文件已準備就緒。當您的佈局包含shared.js.erb時,它將在服務器端呈現。這種「創造」與內容的shared.js文件,如:

$(document).ready(function(){ 
$('#deviceIDbutton').click(function() { 
    $("#deviceIDfield").val('werwe87wer78we7w8erew'); 
    }); 
}) 

當文檔準備好被執行就緒()調用該函數並結合功能對被執行單擊事件到#deviceIDbutton元素。所以,每次你點擊你的按鈕,執行相同的函數,一次又一次地設置相同的隨機碼。

你的函數應該對控制器中的一個方法進行遠程調用,該方法返回一個新的安全隨機碼。你可以使用JQuery.get()來做到這一點。

如果代碼只是一個隨機生成的代碼,您可以在瀏覽器中使用一些JavaScript生成,避免調用服務器端。

有關調用控制器方法的示例,您可以看到this other SO answer

+0

有關使用JQuery.get()調用控制器方法的一些示例代碼的機會?謝謝 – user1344048 2012-04-19 14:25:33

+0

爲此添加了對其他SO線程的引用。讓我知道如果你需要進一步的幫助 – Christian 2012-04-19 14:31:38

+0

我仍然堅持這個問題......這種方法似乎有點冗長和不自然。我是否需要添加路線到我的路線文件?爲什麼使用jQuery填充點擊文本框這麼簡單?有些東西看起來不正確。 – user1344048 2012-04-19 17:13:03