我怎样才能轻松地将我从 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 %>
再见,
妮可
首先,您需要知道帮助程序 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>
上面的代码是用户在他的浏览器中获取的。如果您阅读 documentation对于 text_field_with_auto_complete
,您会看到我们可以使用选项 :after_update_element
。此选项允许我们指定当用户选择其中一个建议值时将调用的 JavaScript 函数的名称。
我们需要做的:
- 编写一个 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 的基础知识。
我是一名优秀的程序员,十分优秀!