【问题标题】:ng-change event should be called only after typing is completedng-change 事件只能在输入完成后调用
【发布时间】:2019-02-02 06:33:15
【问题描述】:

我有一个带有 ng-change 事件的文本字段。只有在用户完成输入时才应该调用事件。如何延迟调用事件?

<input type="text" ng-model="custname" ng-change="findCustName()">

【问题讨论】:

  • Angular ng-change delay的可能重复
  • 请澄清您所说的“完成”是什么意思。从下面的答案中可以看出,您可以为 ng-change 添加延迟,以便在用户停止输入后触发 x ms。或者触发 blur 事件的变化。
  • 你对用户完成输入的定义是什么?从用户停止输入开始有时间延迟吗?
  • 澄清一下,当你认为用户已经完成了输入?

标签: angularjs angularjs-ng-change


【解决方案1】:

您应该改用 ng-blur

当元素失去焦点时会触发模糊事件。

<input type="text" ng-model="custname" ng-blur="findCustName()">

如果您不想使用 ng-blur 或失焦,可以使用与 ng-model-options

相同的 ng-change

从 Angular 1.3 开始,您可以使用 Angular ng-model-options 指令

<input ng-change="findCustName()" ng-model-options="{debounce:1000}">

【讨论】:

  • ng-blur 会在焦点消失时被调用
  • 相当于用户完成输入
  • @Sajeetharan 这不是真的,需要做出假设。 Grails 需要澄清什么是“完成输入”
  • 是的,你可以通过去抖时间做到这一点
  • @BShaps ng-model-options="{debounce: 750, updateOn: 'blur'}" 将导致模型值在焦点丢失后 750ms 更新。如果您希望它在模糊或延迟时更新,您可以使用ng-model-options="{debounce: {blur: 0, default: 750}, updateOn: 'blur default'}"。
【解决方案2】:

当我想在输入完成后调用函数时,我使用ng-keyup。

使用ng-keyup,每次用户按键时都会调用您的函数。

我知道你问用户何时完成输入,但让我解释一下为什么我更喜欢使用ng-keyup 而不是ng-blur

如果我必须调用验证函数,ng-blur 将无济于事,因为您必须专注于启动该函数。使用ng-keydown,将启动功能。因此,如果用户完成输入,它也会启动

【讨论】:

  • 它不会,因为 ng-keyup 会触发该函数但他不知道输入的长度。如果我只输入三个单词然后什么都不做会发生什么?所以在用户完成输入后调用 ng-change 事件,以及每次用户按键时调用函数的操作。
猜你喜欢
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多