在我的应用程序中,我有一个具有这种行为的表单:在输入失去焦点或用户按 Enter 后,表单字段值会逐渐上传到服务器。它是通过挂钩失去焦点(自定义指令)和按键(ng-keydown
)事件来完成的。同时,我正在使用 Angular-ui Bootstrap Typeahead 控件进行城市查找(以及其他一些字段)。输入如下所示:
<input type="text" name="city"
ng-model="dispatcher.city"
ng-keydown="dispatcher.inputKeyPress($event)"
typeahead="obj.city as obj.city for obj in lookup('city', $viewValue)">
没有预输入的输入工作正常,但是当涉及到城市输入时,它的工作方式如下:
- 用户开始输入城市,例如 Lon
- 预输入显示带有建议的弹出窗口
- 用户选择 London 并按 Enter
- typeahead 用 London 填充输入,但不久之后输入值更改为 Lon a,即发送到服务器的值。
我想 keypress 事件会导致两个动作:typeahed 处理它的方式,同时ng-keydown
解释它的方式。在我看来,要么 typeahead 应该“消耗”事件而不是让它“继续”,或者ng-keydown
回调应该知道 typeahead 建议是否显示(以便它可以“跳过”某些事件)。
我玩过,typeahead-on-select="onSelect($item, $model, $label)"
但我无法以某种方式同步这两个回调(inputKeyPress
和onSelect
)——按键似乎运行得更快。
任何建议如何完成这些?或者完全是别的什么?
谢谢
除此之外,Typeahead 是一个很棒的控件。