Оказывается, я в конечном итоге использовал комбинированный список автозаполнения jquery (http://jqueryui.com/demos/autocomplete/#combobox) с некоторыми модификациями. В частности, перечисленная функция change: ищет недопустимые выборы (что является нашим случаем, если пользователь вводит в комбинированный список). код по умолчанию из виджета:
...
change: function( event, ui ) {
if ( !ui.item ) {
...
});
if ( !valid ) {
// remove invalid value, as it didn't match anything
$( this ).val( "" );
select.val( "" );
input.data( "autocomplete" ).term = "";
return false;
}
}
}
...
и я изменил его на:
...
change: function( event, ui ) {
if ( !ui.item ) {
...
});
if ( !valid ) {
var _new_text = $(this).val()
var _new_option = '<option value="'+_new_text+'">' + _new_text + '</option>'
select.prepend(_new_option);//append to combobox
//now let's select it for submission
select.children( "option" ).each(function(){
if( $(this).text().match(_new_text) ){
this.selected = true;
return false;
}
})
}
}
}
...
Не уверен, что есть лучший способ сделать это, но сейчас я здесь! Сейчас работаю над фильтрацией контента в Rails, но это уже другая история.