2

我正在使用 Jquery,我想使用选择器在 foreach 循环中定位每个孩子:

   $('div.parents').children('a').each(function(i) {
        setTimeout(function(){
            $(this).trigger( "click" );
        },2000 + i * 2000); 
    });

但是,$(this)似乎根本不起作用。该列表如下所示: 如果我更改 $(this).trigger( "click" ); $('a').trigger("click"); 它将一次打开所有链接。

<div class="parents">
<a class="child"></a> 
<a class="child"></a> 
<a class="child"></a> 
...
</div>

谢谢你的帮助!

4

2 回答 2

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[仅适用于与 ECMAScript 5 兼容的浏览器]:

$('div.parents').children('a').each(function(i) {
        setTimeout(function(){
            $(this).trigger( "click" );
        }.bind(this),2000 + i * 2000); 
    });
于 2013-10-09T15:43:05.400 回答
2

问题是thissetTimeout回调里面没有指向被点击的元素,你可以使用闭包变量来解决这个问题

$('div.parents').children('a').each(function(i) {
    var $this = $(this)
    setTimeout(function(){
        $this.trigger( "click" );
    },2000 + i * 2000); 
});
于 2013-10-09T15:41:12.547 回答