【发布时间】:2013-01-16 19:17:53
【问题描述】:
在我的 Angular 应用程序的几个地方,我需要使用 ESC 键清除用户的输入。问题是,我不知道如何使用文本输入字段(textarea 清除 OK)。看到这个小提琴:
jsFiddle demonstration of the problem
绑定:
<input ng-model="search.query" ui-keypress="{esc: 'keyCallback($event)'}" />
我使用的回调:
$scope.keyCallback = function($event) {
$event.preventDefault();
$scope.search.query = '';
}
请谁能弄清楚我需要做什么才能使用 ESC 键清除文本输入?
解决方案: 正如bmleite 所建议的那样,您不应该听“keypress”,而应该听'keydown' 和'keyup'。问题是,'keydown' 在 Firefox 中不起作用,所以只有 'keyup' 才起到了监听 ESC 的神奇作用。 ;)
工作小提琴:http://jsfiddle.net/aGpNf/190/
解决方案更新: 最后,我不得不同时监听“keydown”和“keyup”事件。因为在我的情况下,FF 确实将 ESC keydown 上的输入字段重置为以前的状态,所以它弄乱了我的模型。因此,'keyup' 清除模型,'keydown' 检查模型是否为空并执行适当的操作。我还需要手动散焦输入以防止文本重新弹出。:/
【问题讨论】:
-
您能解释一下解决方案更新是什么意思吗?听起来如果 AngularUI 将您的 keyup 包装在
$scope.$apply()中,它会帮助您吗?如果是这种情况,您可以打开一个问题吗?我也很好奇你说的文本弹出是什么意思?此外,您可以执行以下操作:ui-keydown="{ 'esc enter': 'keyCallback($event)' }",任一键都会触发事件。 -
如果有人来到这里并且无法让 esc 在 Chrome 中触发...关闭 Vimium 插件或其他。
-
这似乎不再适用于 Chrome 或 Firefox。我没有在 IE/Edge 或 Opera 中测试过。
标签: angularjs input angular-ui