Angularjs Angular用户界面引导先行型控件和ng键向下

Angularjs Angular用户界面引导先行型控件和ng键向下,angularjs,angular-ui,bootstrap-typeahead,Angularjs,Angular Ui,Bootstrap Typeahead,在我的应用程序中,我有一个具有以下行为的表单:在输入失去焦点或用户点击Enter键后,表单字段值以增量方式上载到服务器。它通过挂接失去焦点(自定义指令)和按键(ng keydown)事件来完成。同时,我使用Angular ui引导Typeahead控件进行城市查找(以及其他一些字段)。输入如下所示: <input type="text" name="city" ng-model="dispatcher.city" ng-keydown="dispatcher.inputKeyPress($

在我的应用程序中,我有一个具有以下行为的表单:在输入失去焦点或用户点击Enter键后,表单字段值以增量方式上载到服务器。它通过挂接失去焦点(自定义指令)和按键(
ng keydown
)事件来完成。同时,我使用Angular ui引导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)">

没有typeahead的输入可以正常工作,但对于city输入,它的工作方式如下:

<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)">
  • 用户开始键入city,例如Lon
  • typeahead将显示带有建议的弹出窗口
  • 用户选择伦敦并按Enter键
  • typeahead用London填充输入,但不久之后就是输入 值更改为Lon a,即发送到服务器的值
  • 我假设keypress事件会导致两个动作:typeahed处理它的方式,同时
    ng keydown
    解释它的方式。在我看来,要么typeahead应该“消费”事件而不让它“继续”,要么
    ng keydown
    回调应该知道是否显示了typeahead建议(以便它可以“跳过”某些事件)

    我在select=“onSelect($item,$model,$label)”上玩过
    typeahead,但不知何故,我无法同步这两个回调(
    inputKeyPress
    onSelect
    ),按键似乎运行得更快

    对于如何实现这些目标有何建议?或者完全是别的什么

    谢谢


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

    请尝试删除keydown事件挂钩,对我来说,看起来您实际上并不需要它。您的逻辑应该在typeahead的select事件和失去焦点时触发,您将跟踪所有情况下的值更改


    希望这有帮助

    谢谢你的提示Alex,我试过了。问题是表单中还有其他输入,但没有使用“enter to save”逻辑提前键入。我希望在整个表单中保持逻辑一致。当我摆脱了typeahed输入上的按键钩子,改用onSelect时,当用户可以从typeahead建议中选择一个选项时,它工作得很好。但当输入新值时,“输入保存”逻辑失败,因为未触发onSelect,并且在输入后未保存新值。失去焦点可以做到这一点,但表单行为不一致。您是否希望用户能够输入typeahead中不存在的值?该功能已经存在,用户可以从typeahead建议中选择或输入新的建议。-那很好。我只是无法将它与另一个callbeck(按键)同步。您是否将typeahead绑定到您模型上的实际值?(ng模式)?这可能就是问题所在。。否则,也许您可以仅为此表单字段禁用“打开失去焦点”功能?我已经绑定了keypress和keydown,这样我就可以跟踪它,但这似乎不是您所需要的。谢谢特伦顿的努力。我不知怎的觉得我构建表单的方式不是正确的方向,我将彻底改变它。这似乎太复杂了,无法继续下去,我怀疑还会有更多的问题。再次感谢。NP。。。总是乐于助人:)