gpt4 book ai didi

javascript - Knockout.js hasfocus 会导致在节流期限到期之前失去焦点时重置值

转载 作者:行者123 更新时间:2023-11-28 09:23:24 26 4
gpt4 key购买 nike

这是一个说明我的问题的小示例代码:http://jsfiddle.net/wsytR/2/

如果您更改输入中的文本,然后按 Tab 键将其模糊,则值会变回旧值。如果您在 throttle 周期结束之前切换焦点,就会发生这种情况。在我看来,可观察的结果根本没有以这种方式改变。

我找到了this question从它到 this issue 。我重新排序了绑定(bind),使 hasfocus 成为第一个,但运气不佳。

此外,如果不是按 Tab 键切换焦点,而是按 Esc 键或仅单击页面上的其他位置,则旧值将再次恢复,但在节流周期到期后,可观察值会更新并且值再次发生变化,这一次到新的。 Tab 和 Escape/click 可能会触发不同类型的事件。

有没有办法通过 knockout 来处理这个问题?我是否试图做一些错误的事情或者一些不应该在 knockout 中起作用的事情?

编辑:

事实证明我没有正确表达我的问题。我需要从模型中设置焦点,因此限制 hasfocus 绑定(bind)并不能解决我的问题。如果您只需要在离开元素后正确更新它但仍保持 throttle ,那么效果很好。

我的目标是在失去焦点时立即更新,但在打字之前限制绑定(bind)。

最佳答案

knockout 中的内置 throttle 扩展器正如其名称所示:它会限制更新。看来我想做点别的事情。在模糊字段时立即更新值,但否则会在键入时限制输入。

我最终想出的解决方案是调整内置 throttle 扩展器并将其添加为自定义扩展器:

ko.extenders.smart_throttle = function(target, timeout) {
target['throttleEvaluation'] = timeout;
target['lastUpdatedValue'] = null;

var writeTimeoutInstance = null;
return ko.computed({
'read': target,
'write': function(value) {
if (value == target()) {
clearTimeout(writeTimeoutInstance);
target(target['lastUpdatedValue']);
return;
}

clearTimeout(writeTimeoutInstance);
target['lastUpdatedValue'] = value;
writeTimeoutInstance = setTimeout(function() {
target(value);
}, timeout);
}
});
}

Akshat 的回答仍然完美地解决了我原来的问题。很抱歉没有正确地表述它。

关于javascript - Knockout.js hasfocus 会导致在节流期限到期之前失去焦点时重置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14705924/

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