在while循环中将变量传递给:eq jquery选择器

Passing variable to :eq jquery selector in a while loop

本文关键字:eq jquery 选择器 循环 while 变量      更新时间:2023-09-26

我试图将jquery hover函数分配给<ul>列表中的所有元素:

var element = 0;
var length = $(".artist-list-link").length;
while (element<length) {
    $(".artist-list-link:eq("+element+")").hover(function() {
        $(".artist-back:eq("+element+")").css('display','block');
        $(".artist-hover:eq("+element+")").fadeIn(100);
    }, function() {
        $(".artist-back:eq("+element+")").css('display','none');
        $(".artist-hover:eq("+element+")").fadeOut(100);
    });
element++;
};

标记如下:

<ul>
    <li><a class="artist-list-link" href="">Artist 1</a></li>
    <li><a class="artist-list-link" href="">Artist 2</a></li>
    <li><a class="artist-list-link" href="">Artist 3</a></li>
    <li><a class="artist-list-link" href="">Artist 4</a></li>
    <li><a class="artist-list-link" href="">Artist 5</a></li>
</ul>

我也有一些div为每个艺术家(我已经删除了所有的链接,只是为了让它更容易读。

<div class="artist-thumbnail artist-size">
    <div class="artist-card artist-size artist-hover"></div>
    <div class="artist-card artist-size"><img src="" /></div>
    <div class="artist-card artist-size artist-back">Artist 1</div> 
</div>

但是上面的循环实际上不起作用,尽管下面的代码可以完美地工作:

$('.artist-list-link:eq(0)').hover(function() {
    $('.artist-back:eq(0)').css('display','block');
    $('.artist-hover:eq(0)').fadeIn(100);
}, function() {
    $('.artist-back:eq(0)').css('display','none');
    $('.artist-hover:eq(0)').fadeOut(100);
});

有什么问题吗?谢谢你的回答。

这是因为element在回调调用时发生了变化。

你可以这样做:

while (element<length) {
    (function(element) {
      $(".artist-list-link:eq("+element+")").hover(function() {
        $(".artist-back:eq("+element+")").css('display','block');
        $(".artist-hover:eq("+element+")").fadeIn(100);
      }, function() {
        $(".artist-back:eq("+element+")").css('display','none');
        $(".artist-hover:eq("+element+")").fadeOut(100);
      });
    })(element);
    element++;
}; 

在闭包中保护元素的值