angularjs-从自动完成中选择时,避免在输入中失去焦点

angularjs-从自动完成中选择时,避免在输入中失去焦点,angularjs,autocomplete,angularjs-directive,Angularjs,Autocomplete,Angularjs Directive,我有一个带有jquery autocomplete的输入字段和另一个指令 当输入字段失去焦点时,将调用一个函数以使用该值执行某些更新 我的问题是,当使用鼠标从自动完成列表中选择一个值时,输入字段失去焦点,导致该值被保存 为了避免这种行为,我更改了autocomplete指令,在选择后将焦点设置回输入字段。“模糊”指令仅在渲染后检查模糊 elm.bind('blur', function() { // Wait for DOM to finish rendering $timeout(f

我有一个带有jquery autocomplete的输入字段和另一个指令

当输入字段失去焦点时,将调用一个函数以使用该值执行某些更新

我的问题是,当使用鼠标从自动完成列表中选择一个值时,输入字段失去焦点,导致该值被保存

为了避免这种行为,我更改了autocomplete指令,在选择后将焦点设置回输入字段。“模糊”指令仅在渲染后检查模糊

elm.bind('blur', function() { 
  // Wait for DOM to finish rendering
  $timeout(function() {
    if ( !$(elm).is(":focus")){
      scope.update();
      scope.check_dirty();
    }
  },0);
});
但它似乎不起作用。 达到此功能时,
activeElement
为主体


非常感谢您的帮助

快速玩了一下Plunker,似乎如果你将超时值设置为100ms或更大,事情就会按照你的意愿进行。(尽管我认为在这种情况下使用
$timeout
有点不太恰当)你说得对,它确实如此。但这是非常丑陋的,因为它可以得到。你知道没有固定超时的硬编码的其他方法吗?@haki:我不知道你想用各种函数和事件侦听器实现什么,但我觉得你把事情复杂化了。您是否研究过如何利用
ngModelController
(功能非常强大)。@ExpertSystem-是您的平均自动完成字段在输入和模糊时更新值。实际上,我在这一过程中遇到了几个
ngModelController
奇怪的地方(例如,在
$setViewValue
之后必须
$render
)。我现在唯一的问题是用鼠标从自动完成列表中进行选择。@haki:就像我说的,我真的不明白你想用这些事件列表和超时来实现什么(所以我可能错了)。这似乎很复杂。(顺便说一句,渲染$viewValue有什么“奇怪”的地方?)