2016-12-28 6 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)); 

このdoesntの仕事。あなたは、あなたがどこかに停止する必要が入力で、また

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">

関連する問題