2016-12-28 55 views
-3

我试图制作一个程序,该字段使用动画在字段中键入文本。但它不起作用。为什么???使用setTimeout()使用动画键入的文本不起作用

var str = "SuperUser"; 
var i = 0; 
var inp = document.getElementsByTagName("input")[0]; 

function enter(str, elem, i){ 
    elem.value += str[i]; 
    i++; 
    setTimeout(enter(str, inp, i), getRandomInt(500, 2000)) 
} 
setTimeout(enter(str, inp, i), getRandomInt(500, 2000)) 

function getRandomInt(min, max) { 
    return Math.floor(Math.random() * (max - min)) + min; 
} 

错误截图:

JS console error on chrome browser

+1

请界定“不起作用“。另外,描述你想要你的代码做什么,以及它做什么。然后,您需要了解函数调用和函数引用之间的区别。 – Teemu

+1

并不包括错误的截图,将实际的错误文本复制到您的问题中,以便搜索可以正确编制索引,而其他用户可以找到它 – 23tux

+0

最好的选择是将参数'绑定到'输入'功能。 'enter.bind(this,str,inp,i)' –

回答

1
setTimeout(enter(str, inp, i), getRandomInt(500, 2000)); 

这行不通。它在超时执行返回值,这样做:

setTimeout(function(){ 
enter(str,inp,i); 
},1000); 

而且,在你输入你需要停下来的地方。添加到第一行:

if(i>=str.length){return;} 

顺便说一句,你不需要传递变量吗更有在全球范围内:

enter(); 

一起:

window.onload=function(){ 
var str = "SuperUser"; 
var i = 0; 
var inp = document.getElementsByTagName("input")[0]; 
    function enter(){ 
    if(i>=str.length){return;} 
    inp.value += str[i]; 
    i++; 
    setTimeout(enter, getRandomInt(500, 2000)); 
} 
enter(); 
function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; } 
}; 
+0

非常感谢! –

0

您递归调用enter(str, inp, i)功能。这就是为什么它超过堆栈内存。 没有停止条件。

var str = "SuperUser"; 
 
var i = 0; 
 
var inp = document.getElementsByTagName("input")[0]; 
 

 
function enter(str, elem, i){ 
 
    elem.value += str[i]; 
 
    i++; 
 
    setTimeout(enter(str, inp, i), getRandomInt(500, 2000)); 
 
} 
 
enter(str, inp, i); 
 

 
function getRandomInt(min, max) { 
 
    return Math.floor(Math.random() * (max - min)) + min; 
 
}
<input type="text"> 
 
<input type="text"> 
 
<input type="text">