В чем причина, хз, но методом проб можно придумать массу решений…
Например, использовать событие keyup вместо keydown, или выполнять очистку поля про помощи таймера с задержкой 0.
if (k == 27)
setTimeout((function(inp) {return function() {inp.value = '';}})(this), 0);
Или как-то дополнительно воздействовать на элемент, чтобы он «зашевелился»
if (k == 27) {this.blur(); this.value=""; this.focus();}