如何轻松地将我从auto_complete文本字段获取的值传递给部分文本。
<%= 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 %>
再见,
尼科
答案 0 :(得分:1)
首先,您需要知道帮助者text_field_with_auto_complete
和button_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>
上面的代码是用户进入他的浏览器。
如果您阅读了text_field_with_auto_complete
的{{3}},那么您会看到我们可以使用:after_update_element
选项。此选项允许我们指定当用户选择其中一个建议值时将调用的JavaScript函数的名称。
我们需要做什么:
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
当然,您可以使用tokland提出的方法。
但我建议您先学习HTML和Javascript的基础知识。
答案 1 :(得分:0)
首先请注意,button_to_function
的块(当然是部分的)生成服务器端,因此它无法知道客户端中自动完成的值。你有2种方法可以完成你想要的:为auto_complete创建一个RJS动作(如果可能的话)或2)使用Javascript / AJAX并连接到auto_complete URL,获取值并相应地修改DOM(也在JS中)。