2017-01-28 8 views
0

ページ内のボタンをクリックするときにクリック間にポーズを追加しようとしています。クリックに時間機能を追加する方法

それは私を与えている

var inputs = document.getElementsByClassName('xxxxxx'); 

for(var i=0;i<inputs.length;i++) { 
    setTimeout(function() { 
     inputs[i].click(); 
    }, (1000 * i)) 
} 

それにアプローチする方法が他にわからない「をキャッチされない例外TypeErrorプロパティを読み取ることができません未定義の 『クリック』」。タイムアウトを削除すると、クリックが正しく機能します。

+1

[ループ内のJavaScriptクロージャー - 簡単な実用的な例]の可能な複製(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – user3

答えて

2

これは「ループ変数を閉じる」という問題です。何が起きているのは、タイムアウトが実際に発生すると、iinputs.lengthに等しく、これは入力セットの終わりを超えています。

最も簡単な解決策:のためのテストを試してみてください

var inputs = document.getElementsByClassName('xxxxxx'); 

Array.prototype.slice.call(inputs).forEach(function (input, i) { 
    setTimeout(function() { 
     input.click(); 
    }, 1000 * i); 
});  
+0

ありがとうそれを解決し、私に新しい学習方向を与えました。 –

0

:あなたは、各入力自体とiの独立した、非変動のコピーを含む別の閉鎖を持っているように、代わりにたえず変化i変数の、Array#forEachを使用nullの場合の入力:

if (inputs[i] != null) { 
inputs[i].click();} 

完了し、ドキュメントの完了時にタイマーを開始してください。

関連する問題