Почему возвращается неверное значение инпута?
В таких случаях используют событие "input". По ссылке по подробнее: learn.javascript.ru/events-change
При событии keydown вы получаете значение текстового поля до внесения в него изменений, так как ввод еще не завершен.
Для обработки события keyup вы указали неправильный селектор. Ваша конструкция предполагает, что элемент с классом .select-city будет вложен в элемент .select-city (который будет вложен в элемент body).
Исправить можно следующим образом:$('body').on('keyup', '.select-city', function(e){
    console.log(e.target.value)
});
Пример: https://jsfiddle.net/4uqLoL0L/1/
PS В этом случае событие "onkeydown" в html уде будет лишним скорее всего.