вы хотите keyup, keydown или их комбинацию.во время обработки нажатия клавиш вы можете получить значение текстового поля до события.во время работы с обработчиком ключей вы можете получить значение после события.если вы получаете пустую строку, вы делаете что-то не так.
edit: вот пример, демонстрирующий, как работают эти 2 события.ввод в первое поле обновляет два других.
<table>
<tr>
<td>input</td>
<td><input type="text" id="textin" /></td>
</tr>
<tr>
<td>keydown</td>
<td><input type="text" id="keydownout" /></td>
</tr>
<tr>
<td>keyup</td>
<td><input type="text" id="keyupout" /></td>
</tr>
</table>
<script>
var readbox = document.getElementById('textin');
var keydownbox = document.getElementById('keydownout');
var keyupbox = document.getElementById('keyupout');
function keydownhandler(e) {
keydownbox.value = readbox.value;
}
function keyuphandler(e) {
keyupbox.value = readbox.value;
}
readbox.addEventListener('keydown', keydownhandler, false);
readbox.addEventListener('keyup', keyuphandler, false);
</script>
(работает в Firefox / Chrome)