gpt4 book ai didi

Angularjs 去抖多个事件不起作用

转载 作者:行者123 更新时间:2023-12-02 06:59:37 26 4
gpt4 key购买 nike

我正在查看 Angular documentation for handling forms并找到了一个非常有用的示例,用于延迟捕获任何字段/控件中的更新。以下是 Angularjs 提供的示例代码:

<input type="text" ng-model="user.name" ng-model-options="{ debounce: 250 }" /><br />

它工作正常。但他们提到 debounce 可以与多个事件一起使用,并提供了另一个示例:

<input type="text" ng-model="user.name" ng-model-options="{ updateOn: 'default blur', debounce: { default: 500, blur: 0 } }" /><br />

这个例子的问题是无论你是否离开字段/控件,它总是延迟更新。而在这种情况下,当用户离开字段/控件时,它应该立即更新模型,因为在 blur 的情况下,debounce0

Here is link for running example in Plunker.

任何人都可以解释这种行为。

最佳答案

我相信您是 Javascript 类型转换的受害者,特别是 0false。检查 Angular 1.3.0-beta7 的未压缩源代码,第 18305 行:

var debounceDelay = ctrl.$options && (isObject(ctrl.$options.debounce)
? (ctrl.$options.debounce[trigger] || ctrl.$options.debounce['default'] || 0)
: ctrl.$options.debounce) || 0;

因此,如果您指定了 options.debounce,它将尝试首先将 debounceDelay 设置为 options.debounce.blur,如您所料。但由于这是 0(false),它会继续执行 ... || ...ctrl.$options.debounce['default'],它是非零的(true)并设置这个值!

作为解决方法,您可以指定触发默认事件的确切名称(是 keyup 吗?),或者为您的延迟指定一个小但非零的值,例如1:

debounce: { default: 500, blur: 1 }

我认为这应该作为 Angular 的错误提交。

关于Angularjs 去抖多个事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23538678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com