0

在我的应用程序中,我有一个具有这种行为的表单:在输入失去焦点或用户按 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)">

没有预输入的输入工作正常,但是当涉及到城市输入时,它的工作方式如下:

  1. 用户开始输入城市,例如 Lon
  2. 预输入显示带有建议的弹出窗口
  3. 用户选择 London 并按 Enter
  4. typeahead 用 London 填充输入,但不久之后输入值更改为 Lon a,即发送到服务器的值。

我想 keypress 事件会导致两个动作:typeahed 处理它的方式,同时ng-keydown解释它的方式。在我看来,要么 typeahead 应该“消耗”事件而不是让它“继续”,或者ng-keydown回调应该知道 typeahead 建议是否显示(以便它可以“跳过”某些事件)。

我玩过,typeahead-on-select="onSelect($item, $model, $label)"但我无法以某种方式同步这两个回调(inputKeyPressonSelect)——按键似乎运行得更快。

任何建议如何完成这些?或者完全是别的什么?

谢谢

除此之外,Typeahead 是一个很棒的控件。

4

1 回答 1

0

尝试完全删除您的 keydown 事件挂钩,对我来说,您似乎并不需要它。您的逻辑应该在 typeahead 的选择事件和失去焦点时触发,您将在所有情况下跟踪值变化。

希望这可以帮助

于 2013-10-30T20:44:18.087 回答