2013-10-30 49 views
1

请不要立即将其标记为重复。我看过类似的问题,但仍然无法弄清楚。如何在JavaScript中连接变量和字符串?

这是我目前:

$(document).ready(function(){ 
    for(var i=1;i<2;i++) 
    { 
     $("#MenuBarButton"+i).mouseover(function(){ 
      $("#ldheMenuBarLayer"+i).stop().animate({height:'66px'},{queue:false, duration:600, easing: 'easeOutBounce'}) 
     }); 
     $("#MenuBarButton"+i).mouseout(function(){ 
      $("#ldheMenuBarLayer"+i).stop().animate({height:'41px'},{queue:false, duration:600, easing: 'easeOutBounce'}) 
     }); 
    } 
}); 

这是行不通的。没有任何反应,控制台上没有任何内容。但是,如果我直接将i替换为1中的每个$函数。

我对编程并不陌生,但我是JavaScript新手,所以我在做什么明显错误?谢谢!

编辑:当我说我有1更换i,那是因为ID是MenuBarButton1ldheMenuBarLayer1

+1

您的for循环仅执行一次...为什么使用for循环?如果i = 1并且它仅评估为i <2,那么它只执行一次。这是意图吗? – Josh

+0

1.尝试将数字变量'i'强制转换为字符串:'.. + String(i)'。 2.这里不需要循环:'for(var i = 1; i <2; i ++)'只会'循环'一次,'i = 1'。 – usr2564301

+0

@SoylentGreen因为一旦我只用一个按钮就可以完成它的工作,它将循环大约5或6. – Clonkex

回答

2

您的基本问题是i只有一个值。该变量只存在一次。事件处理程序内的代码指向变量,而不是创建事件处理程序时的值。所以,把你的代码看起来像这样:

$("#ldheMenuBarLayer"+i).stop()... 

每一个事件处理程序运行时,i2,因为我们已经通过循环了一路。

您需要使用的值i,而不是对变量的引用。您可以通过引入新的范围使用匿名,立即调用的函数做到这一点:

for(var i=1;i<=2;i++) 
{ 
    (function(j) { 
     $("#MenuBarButton"+j).mouseover(function(){ 
      $("#ldheMenuBarLayer"+j).stop().animate({height:'66px'},{queue:false, duration:600, easing: 'easeOutBounce'}) 
     }); 
     $("#MenuBarButton"+j).mouseout(function(){ 
      $("#ldheMenuBarLayer"+j).stop().animate({height:'41px'},{queue:false, duration:600, easing: 'easeOutBounce'}) 
     }); 
    }(i)) 
} 

撇开这一切,这是值得一提的是这不是处理事情非常jQuery的十岁上下的方式。 jQuery方式可能如下所示:

var menuBarButtons = $('.menuBarButton').mouseover(function() { 
    var idx = menuBarButtons.index(this); 

    $('.ldheMenuBarLayer') 
     .eq(idx) 
     .stop() 
     .animate(
      { 
       height: '66px' 
      }, 
      { 
       queue: false, 
       duration: 600, 
       easing: 'easeOutBounce' 
      } 
     ); 
}); 

此代码不起作用(可能)。它需要基于你的标记和页面结构。它最终可能是不可能的。

+0

“你可能想要为i 1和2的值做循环。这个代码是”不,不,我完全理解循环是如何工作的,我现在只需要一个循环。一旦我有第一个工作,我会根据需要增加它。谢谢:) – Clonkex

+0

此外,我不能改变CSS或HTML的东西,所以我不能用一个搜索。 – Clonkex

+0

@Clonkex阿哈,这是有道理的。我删除了我的帖子的那一部分。你可能会研究一些复杂的选择器,比如'[id^=“MenuBarButton”]',但是现在如果你可以用稍微的un-jQuery方法来满足你的需求,这可能与你无关。 – lonesomeday

相关问题