首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多数组参数传递给jquery for循环

如何将多数组参数传递给jquery for循环
EN

Stack Overflow用户
提问于 2014-06-25 05:20:48
回答 4查看 63关注 0票数 0

我想在将鼠标悬停在overlay%s上时显示我的item%s。

代码如下:

代码语言:javascript
复制
<div class="item" id="item-1">
    <div class="overlay" id="overlay-1"></div>
</div>
<div class="item" id="item-2">
    <div class="overlay" id="overlay-2"></div>
</div>
代码语言:javascript
复制
var items=["#item-1","#item-2"];
var overlays=["#overlay-1","#overlay-2"];
for (var i = 0; i < products.length; i++) {
  $(items[i]).hover(
    function(){$(overlays[i]).css("visibility", "visible");},
    function(){$(overlays[i]).css("visibility", "hidden");});
}

然而,它不能工作...看起来overlays[i]不能被识别。

为什么?

EN

回答 4

Stack Overflow用户

发布于 2014-06-25 05:37:54

我会做这样的事情

代码语言:javascript
复制
$(".item").hover(function(){
    $(this).find(".overlay").show();
});
票数 1
EN

Stack Overflow用户

发布于 2014-06-25 06:18:15

这似乎是一个作用域问题,您试图选择的覆盖超出了范围。

只需将鼠标悬停应用于"item“类,并将隐藏/显示逻辑应用于"overlay”类,就可以消除显式循环遍历所有项的需要。此外,为了隐藏和显示项,jQuery友好的模式是使用隐藏和显示方法。

代码语言:javascript
复制
$('div.item').hover(function(){
    var overlay = $(this).children('div.overlay');
    overlay.hide();
});
overlay.hide();
},
function(){
    var overlay = $(this).children('div.overlay');
    overlay.show();
});

在不了解所有细节的情况下,您应该知道这种方法可能会产生一些不必要的闪烁。

票数 0
EN

Stack Overflow用户

发布于 2014-06-25 05:31:53

这是一个闭包问题。到悬停输入/输出函数实际运行时,循环已经退出很久了,并且i > 2

添加一个单独的处理函数:

代码语言:javascript
复制
var items=["#item-1","#item-2"];
var overlays=["#overlay-1","#overlay-2"];

function sethover(n) {
  $(items[n]).hover(
    function(){$(overlays[n]).css("visibility", "visible");},
    function(){$(overlays[n]).css("visibility", "hidden");});
}

for (var i = 0; i < items.length; i++) {
  sethover(i);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24396517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档