В нескольких местах моего приложения Angular мне нужно очистить ввод от пользователя с помощью клавиши ESC. Проблема в том, что я не знаю, как это сделать с полями ввода текста (textarea очищает OK). Смотрите эту скрипку:
демонстрация проблемы с помощью jsFiddle
Привязка:
<input ng-model="search.query" ui-keypress="{esc: 'keyCallback($event)'}" />
Обратный звонок я использую:
$scope.keyCallback = function($event) {
$event.preventDefault();
$scope.search.query = '';
}
Может ли кто-нибудь, пожалуйста, выяснить, что мне нужно сделать, чтобы очистить ввод текста с помощью клавиши ESC?
РЕШЕНИЕ: Согласно рекомендациям bmleite, вам следует слушать не «нажатие клавиши», а < strong> 'keydown' и 'keyup'. Проблема заключалась в том, что «keydown» не работает в Firefox, поэтому только «keyup» выполнял волшебный трюк с прослушиванием ESC. ;)
Рабочая скрипка: http://jsfiddle.net/aGpNf/190/
ОБНОВЛЕНИЕ РЕШЕНИЯ. В конце концов, мне пришлось прислушиваться к событиям keydown и keyup. Потому что в моем случае FF сбрасывает поле ввода при нажатии клавиши ESC до предыдущего состояния, поэтому моя модель испортилась. Таким образом, keyup очищает модель, а keydown проверяет, пуста ли модель, и выполняет соответствующие действия. Мне также нужно вручную расфокусировать ввод, чтобы текст не появлялся снова.: /
$scope.$apply()
? Если это так, можете ли вы открыть вопрос? Мне также любопытно, что вы имеете в виду, говоря, что текст снова появляется? Кроме того, вы можете сделать следующее:ui-keydown="{ 'esc enter': 'keyCallback($event)' }"
и любая клавиша вызовет событие. - person ProLoser   schedule 01.02.2013