【发布时间】:2021-02-23 14:19:25
【问题描述】:
我知道这个话题已经在几篇文章中讨论过,但我似乎无法为我的特定用例做这件事。
所以我需要在一个接一个的页面上模拟将值输入到输入中。用户只是坐下来观看 - 但基本上我需要的是加载,第一个输入重点 > 逐字母输入一个值,然后移动到下一个输入以对其值执行相同操作。
到目前为止,这是我对我的代码的意思的一个小问题:https://codepen.io/samwoodchs/pen/WNxYmPj
$(document).ready(function(){
$('.typein').each(function(i, el) {
var value = $(this).data('value');
$(this).focus();
$(this).val(''); //clear
typeText($(this), value, 150, 0);
});
function typeText(item, text, delay, i) {
$(item).val($(item).val() + text.charAt(i))
.delay(delay)
.promise()
.done(function() {
if(i<text.length) {
i++;
typeText(item, text, delay, i);
}
});
}
});
我在 jQuery 的每个循环中都有这个工作,但似乎无法让它按顺序工作,而不是同时工作。我猜我需要使用队列或承诺功能,但不确定如何使用。在每个循环中这样做的原因是不同的页面有不同的输入量,我想找到一个解决方案来通过选择器(类名)而不是手动来定位它。
任何帮助将不胜感激
【问题讨论】:
-
如果您阅读
delay()的文档,它明确指出它不能替代setTimeout方法。delay()仅在您使用 jQuery 执行的操作与其内部动画堆栈之一相关时才有效。设置值与任何动画堆栈都没有任何关系。 api.jquery.com/delay -
感谢延迟使用的解释。代码实际上是由 stan_t 从笔中提取的,所以不是我的工作codepen.io/stan_t/pen/Lafkz。它的工作原理不必担心 - 更多的是我如何让每个依次触发每个运行的输入函数,这是我要求提供一些指导的部分。
-
您的代码是异步的,您想放弃异步进行顺序填充的可能性吗?
标签: javascript jquery loops promise sequential