РЕДАКТИРОВАТЬ: я оставлю этот ответ здесь как своего рода теоретическую точку отсчета, но похоже, что ответ autocompleter , вероятно, будет более полезным для вас:)
Отказ от ответственности: хотя я работаю в Google (в котором явно есть элементы «Предложить» в различных интерфейсах пользователя), я не рассматривал ни одного кода вокруг этой области и даже не говорил никому об аспекте на стороне клиента.
Серверный язык здесь, вероятно, не имеет значения. Важным битом является AJAX, требуемый на стороне клиента.
Я полагаю, что у вас есть таймер примерно на 1 секунду (эксперимент по поиску подходящего места), который сбрасывается каждый раз, когда пользователь вводит нажатие клавиши в текстовое поле, и отменяется, если пользователь уходит от текстового поля. Если таймер срабатывает, заставьте его запустить запрос AJAX. Запрос AJAX будет содержать то, что пользователь набрал до сих пор. Ответом AJAX должен быть список предложений и исходный текст запроса.
Если при возврате ответа AJAX текст в текстовом поле остается таким же, как поле в ответе (т. Е. Пользователь не печатал с тех пор), и если текстовое поле по-прежнему имеет фокус, тогда предложите раскрывающийся список. (Должны быть сотни примеров страниц о комбинированных списках HTML, чтобы сделать эту сторону вещей.)
Все, что нужно серверу, - это ответить на запрос AJAX, выполнив поиск и соответствующим образом отформатировав ответ - это намного проще, чем на стороне клиента!
Надеюсь, это поможет - извините, что у меня нет примера кода, но я подозреваю, что он довольно сложный, и я не являюсь разработчиком JavaScript.