javascript - 为什么它打印最后一个元素

标签 javascript html function

我正在尝试这个 JavaScript 代码

var txt = "", txtLen = 0, elem='';
var speed=90;

function write( obj ) {
    txt = obj.str;
    speed = obj.speed;
    elem = obj.elem;
    txtLen = txt.length;
    setTimeout("loop()", 300);
}
var c=0;
function loop() {
if( c <= txtLen ){
    document.getElementById(elem).innerHTML+=txt.charAt(c);
    c++;
    setTimeout("loop()", speed);
} else {
    c=0;
  }
}

但是在 html 中,当我调用 write 函数两次时,它只打印最后一个,就像这样-

<font id="o"></font><br>
<font id="oo"></font>
<script>
write({ 
 elem:'o', 
 speed:90,
 str:'Hello'
});
write({
 elem:'oo',
 speed:90,
 str:'World'
});

</script>

谁能告诉我错误在哪里吗?

最佳答案

这应该有效

function loop(obj, c) {
    if( c <= obj.str.length ){
       document.getElementById(obj.elem).innerHTML += obj.str.charAt(c);
       setTimeout(loop, obj.speed, obj,c+1);
    } 
}
function write( obj ) {
    setTimeout( loop,  300, obj, 0);
}

setTimeout 函数可以选择将变量传递给回调函数

关于javascript - 为什么它打印最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42522166/

相关文章:

css - div 的背景图像未显示

ios - 如何在协议(protocol)中声明泛型函数

JavaScript 函数定时器。没有按预期工作

C 递归函数

javascript - 使用css隐藏第三个div内容

javascript - 以对象作为键(不是字符串而是唯一对象)的关联映射的 javascript 方法是什么?

asp.net - 如何将 JSON 注入(inject)我的 .aspx 文件?

javascript - Protractor 中继器内部元件

javascript - bootstrap 和 jquery 数据表,将按钮成功更改为危险和文本

html - 设置表单选择元素的宽度和水平位置的 css 是什么?