2010-12-20 83 views
2

如何將我從auto_complete文本字段獲得的值輕鬆傳遞給部分。Rails:如何將值從文本字段傳遞給部分

<%= text_field_with_auto_complete :participant, :name, {}, {:url => {:controller => "contentcom/discussions", :action => :get_users_for_auto_complete}, :method => :get, :param_name => 'search'} %> 
     <%= button_to_function(:OK) do |page| 
       page.insert_html :top, :participants, :partial => 'participant', :locals => end %> 

再見,

尼科

回答

1

首先你需要知道助手text_field_with_auto_completebutton_to_function不是真正處理用戶操作,而只是生成HTML和JavaScript代碼。只有生成的JavaScript代碼才能與用戶進行交互。在這種情況下text_field_with_auto_complete生成以下(大約):

<input type="text" id="participant_name" name="participant[name]" size="15" /> 
<div id="participant_name_auto_complete" class="auto_complete"> </div> 

<script type="text/javascript"> 
    var participant_auto_completer = new Ajax.Autocompleter (
    'Participant', 
    'Name', 
    '/contentcom/discussions/get_users_for_auto_complete', 
    {method: 'GET', param_name: 'search'} 
); 
</script> 

上面的代碼是用戶在得到他的瀏覽器。 如果您閱讀documentationtext_field_with_auto_complete,那麼您會看到我們可以使用選項:after_update_element。該選項允許我們指定當用戶選擇一個建議值時將被調用的JavaScript函數的名稱。

,我們需要做的:

  1. 編寫的JavaScript函數 將顯示在自動填充字段的任何地方的用戶選擇 值。
  2. 呼叫text_field_with_auto_complete:after_update_element

這就是模板將如何看起來像:

<ul id="selected_participant_container"></ul> 

<%= text_field_with_auto_complete :participant, :name, {}, { 
    :url => {:controller => "contentcom/discussions", :action => :get_users_for_auto_complete}, 
    :method => :get, 
    :param_name => 'search', 
    :after_update_element => 'afterParticipantSelected' 
}%> 

<script type="text/javascript"> 
    function afterParticipantSelected (el, value) { 
    var container = document.getElementById ('selected_participant_container'); 

    container.innerHTML = value; 
    } 
</ Script> 

現在,當用戶選擇在自動完成字段中的值,它會在與元素顯示id = selected_participant_container

當然,你可以使用托克蘭提出的方法。

但我會建議你先學習HTML和Javascript的基礎知識。

0

首先注意的button_to_function(當然及其部分)的塊中產生服務器端,所以它沒有辦法知道的值在客戶端的自動完成。你有兩種方法來實現你想要的:爲auto_complete創建一個RJS動作(如果可能的話)或2)使用Javascript/AJAX並連接到auto_complete URL,獲取值並相應地修改DOM(同樣在JS中)。

相關問題