Прежде всего вам необходимо знать, что помощники 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
, то увидите, что мы можем использовать опцию :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.