Rails3.2.8でrails3-jquery-autocomplete1.0.9を使用しています。
<select>
コンボボックス( )をオートコンプリートに置き換えようとしています。コンボボックスのように、ユーザーが値を選択した場合、データベースのIDを更新したいと思います。また、コンボボックスのように、無効な値を選択することはできません。
これの1つの側面は、ユーザーがフィールドへの入力を開始したが、選択リストから値を選択せずにフィールドを離れた場合、フィールド自体と対応する非表示の#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;
}
});