Правильно ли выбраны html-тэги? Имею в виду, что это input.list + datalist. Может, select нужен?
У инпута тег "list" избыточен, его необходимо убрать. datalist заменить на select.
---
Реализация нормальная, но если хотите заморочится - можно отправлять запрос только в момент когда юзер перестал печатать. Что подобное обсуждается тут -
Как сделать ajax поиск с keyup задержкой для уменьшения нагрузки? /
https://learn.javascript.ru/task/debounce
---
Выбор поймать так же как и в инпуте.
Только если вы в инпуте ловите ивент keyup, то в select будет change\onchange
https://www.google.com/search?q=onchange+select+ev...