我正在使用Jquery,我想使用选择器在foreach循环中找到每个孩子:
$('div.parents').children('a').each(function(i) {
setTimeout(function(){
$(this).trigger( "click" );
},2000 + i * 2000);
});
然而, $(this) 似乎根本不起作用。该列表如下所示: 如果我将 $(this).trigger(“点击”); 更改为 $('a')。触发器(“点击”) ; 它会立即打开所有链接。
<div class="parents">
<a class="child"></a>
<a class="child"></a>
<a class="child"></a>
...
</div>
感谢您的帮助!
答案 0 :(得分:3)
让this
内的setTimeout
指向this
以外的setTimeout
,
你可以使用jQuery的$.proxy
:
$('div.parents').children('a').each(function(i) {
setTimeout($.proxy(function(){
$(this).trigger( "click" );
},this),2000 + i * 2000);
});
或.bind
[仅适用于browsers compatible with ECMAScript 5]:
$('div.parents').children('a').each(function(i) {
setTimeout(function(){
$(this).trigger( "click" );
}.bind(this),2000 + i * 2000);
});
答案 1 :(得分:2)
问题是this
在setTimeout回调中没有指向被点击的元素,你可以使用一个闭包变量来解决这个问题
$('div.parents').children('a').each(function(i) {
var $this = $(this)
setTimeout(function(){
$this.trigger( "click" );
},2000 + i * 2000);
});