Я использую rails3-jquery-autocomplete 1.0.9 с Rails 3.2.8.
Я пытаюсь заменить поле со списком (<select>
) автозаполнением. Как и в поле со списком, если пользователь выбирает значение, я хочу обновить идентификатор в базе данных. Также, как и в поле со списком, не должно быть возможности выбрать недопустимое значение.
Одним из аспектов этого является то, что если пользователь начинает вводить текст в поле, но покидает его, не выбрав значение из списка выбора, само поле и соответствующее скрытое поле #to_contact_id должны быть пустыми.
Вот определения полей:
<%= autocomplete_field_tag "to_contact_name", '',
autocomplete_contact_display_name_messages_path,
:id_element => "#to_contact_id",
:value => to_contact_name %>
<%= f.hidden_field :to_contact_id, :id => "to_contact_id" %>
Мой план состоял в том, чтобы установить флаг, когда пользователь выбирает элемент из списка выбора, а затем проверить флаг на размытие (потеря фокуса). Я нашел пример переопределения функции автозаполнения здесь , и закодировал этот Javascript:
var picklist_value_selected = false;
$('input[data-autocomplete]').focus(function() {
// add autocomplete event handler on focus
$(this).autocomplete({
select: function(event, ui) {
picklist_value_selected = true;
}
});
});
$('input[data-autocomplete]').blur(function() {
// If user leaves field without selecting value, clear values.
if (!picklist_value_selected) {
$(this).val('')
$('#to_contact_id').val('');
};
});
Проблема в том, что когда я переопределяю select
, как указано выше, функция "по умолчанию" не выполняется, а это означает, что #to_contact_id никогда не заполняется в первую очередь.
Я предполагаю, что мне нужно расширить select
, а не переопределить его, поэтому выполняется и мой код, и базовый код rails3-jquery-autocomplete? Как я могу это сделать? Различные попытки, такие как следующие, либо не вызываются, либо жалуются на неопределенные методы:
$.extend($(this).autocomplete, {
select: function(event, ui) {
picklist_value_selected = true;
}
});