Я думаю, что текстовое поле будет предпочтительным для этого. Окно выбора не требует ввода текста, поэтому его фильтрация становится чем-то вроде скрытого трюка (не говоря уже о том, что Firefox все равно сделает это правильно).
Вы можете легко бросить изображение рядом с текстовым полем, чтобы указать, что у него есть параметры, которые позволяют управлять мышью или клавиатурой.
Я неравнодушен к JQuery, поэтому я бы использовал автозаполнение JQuery - в котором есть параметры конфигурации, требующие совпадения, или если щелкнуть по полю, выпадут все элементы.
Если вы заинтересованы в «прогрессивном улучшении», вам лучше всего использовать как традиционные входные данные выбора (для обеспечения доступности), которые заменяют на текстовое поле автозаполнения, основанное на тех же данных. Что-то вроде:
<select id="s">
<option value="foo">Foo</value>
<option value="bar">Bar</value>
</select>
var d = $('#s OPTION').map(function() {
return $(this).text();
});
$('#s').hide().append('<input type="text" />')
.autocomplete(d, {
mustMatch: true,
minChars: 0,
autoFill: true,
matchContains: false
})
.result(function(e, d, f) {
// Select option for the form to submit
$('#s').val(d);
});
Вы также можете оставить выделение видимым - что делает его более гибким, но потенциально более запутанным - и подключить обработчик событий к полю выбора, чтобы обновить текстовое поле, чтобы они оставались синхронизированными.