次のコードは正しく動作しません。私はさまざまなバリエーションを試しました&どこでも幸運を検索します。jQuery内のsetTimeout()に関する問題。
i = 1;
var timer = new Array();
jQuery('a').each(function($) {
i++;
timer[i] = setTimeout(jQuery(this).remove(), i * 5000)
})
次のコードは正しく動作しません。私はさまざまなバリエーションを試しました&どこでも幸運を検索します。jQuery内のsetTimeout()に関する問題。
i = 1;
var timer = new Array();
jQuery('a').each(function($) {
i++;
timer[i] = setTimeout(jQuery(this).remove(), i * 5000)
})
ラップ*機能
i = 1;
var timer = new Array();
jQuery('a').each(function($) {
i++;
var thiz = jQuery(this);
timer[i] = setTimeout(function() { thiz.remove(); }, i * 5000);
})
完璧、ありがとう。 –
setTimeout
javascriptのステートメントではないjQuery(this).remove()
の戻り値を受け入れる:P はthis link
あなたができるだけfunction(){stuff}
ではなく、あなたはそれがしたいときjQuery(this)
が処理されるかどうかわからを参照してください。
試してみてください。
<html>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<a href="#">a</a>
<a href="#">a</a>
<a href="#">a</a>
<a href="#">a</a>
<a href="#">a</a>
<a href="#">a</a>
<script>
i = 1;
var timer = new Array();
jQuery('a').each(function($) {
i++;
timer[i] = setTimeout(jQuery.proxy(function(){jQuery(this).remove();},this), i * 500);
})
</script>
</body>
</html>
はフェリックスは、すでにコメントで問題を示唆しているが、私は拡大していきます。
timer[i] = setTimeout(jQuery(this).remove(), i * 5000)
あなたの問題は、jQuery(this).remove()
を起動し、あなたのsetTimeout
に本の戻り値を渡しているという事実にあります。時間切れが切れると、これが実行されることを前提としています。そのような場合は、これを関数にラップする必要があります。この関数はsetTimeout
に渡され、タイマーの期限が切れると実行されます。
var $el = jQuery(this);
timer[i] = setTimeout(function(){
$el.remove()
}, i * 5000)
setTimeout
(またはsetInterval
)への最初のパラメータは、関数への参照にする必要がある(または文字列がありますが、文字列の構文を使用する必要はありません)。
関数をパラメータとして渡す代わりに、関数を呼び出してその結果を渡します。あなたは括弧を削除する場合は、関数への参照を渡します:
timer[i] = setTimeout(jQuery(this).remove, i * 5000)
しかし、その後、あなたはthis
関数が実際に実行される時には間違ったことであることに問題が起動します。このような何かを試してみてください:
var i = 1,
timer = [];
jQuery('a').each(function($) {
i++;
var $this = jQuery(this);
timer[i] = setTimeout(function() {$this.remove();}, i * 5000)
})
これはクロージャsetTimeout
に渡された匿名関数がで$this
関数が宣言されていても、それが実行された時点で$this
変数へのアクセス権を持っているということで仕事のやり方を利用していますそれまでに実行を終了します。
[]
で配列を宣言する方が、new Array()
よりも良いことに注意してください。
i
を1に初期化してから、使用する前にインクリメントして、配列に追加する最初の要素がtimer[2]
になるように注意してください。おそらく、0に初期化してから、各タイマーを設定した後に増分する必要があります。
を持つ要素を削除し、次のコードは正しく動作しません。*あなたはそれが何をしたいですか?あなたの問題は 'jQuery(this).remove()'をすぐに呼び出すことだと思います。 –
また、 'each'に渡される最初の引数は、実際には選択された要素のセット内のDOM要素のインデックスです。つまり、別のカウンタを維持する必要はありません。 [ドキュメントの詳細情報](http://api.jquery.com/each/) –