【问题标题】:How to concatenate variable and string in JavaScript?如何在 JavaScript 中连接变量和字符串?
【发布时间】:2013-11-10 03:29:45
【问题描述】:

请不要立即将此标记为重复。我看过类似的问题,但仍然无法弄清楚。

这是我目前拥有的:

$(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'})
        });
    }
});

这行不通。没有任何反应,控制台中也没有出现任何内容。但是,如果我在每个$ 函数中直接用1 替换i,它就可以工作。

我不是编程新手,但我是 JavaScript 新手,所以我做的事情显然是错误的吗?谢谢!

编辑:当我说我用1 替换i 时,那是因为ID 是MenuBarButton1ldheMenuBarLayer1

【问题讨论】:

  • 你的 for 循环只执行一次... 为什么要使用 for 循环?如果 i=1 并且它只计算为 i
  • 1.尝试将数值变量 i 强制为字符串:.. +String(i)。 2.这里不需要循环:for (var i=1;i&lt;2;i++)只会“循环”一次,i=1
  • @SoylentGreen 因为一旦我用一个按钮就可以使用它,它将循环播放大约 5 或 6 个。
  • @Jongware 数字在带有字符串的+ 表达式中使用时会隐式转换为字符串。
  • 没有真正回答您的问题,但您可以使用$('[id^="MenuBarButton"]') 选择所有具有以“MenuBarButton”开头的 id 属性的元素,因此您根本不需要该循环。

标签: javascript string variables concatenation


【解决方案1】:

您遇到的基本问题是i 只有一个值。该变量只存在一次。事件处理程序内的代码指向变量,而不是创建事件处理程序时的值。因此,请使用如下所示的代码:

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

每次运行事件处理程序时,i 将是 2,因为我们已经完成了整个循环。

您需要使用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'
             }
         );
});

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

【讨论】:

  • "您可能想要对 i 1 和 2 的值进行循环。代码是"不,不,我完全理解循环是如何工作的,我目前只需要一个循环。一旦我有第一个工作,我会根据需要增加它。不过谢谢:)
  • 另外,我无法更改 CSS 或 HTML 中的内容,因此无法使用 . 进行搜索
  • @Clonkex 啊哈,这是有道理的。我已经删除了我帖子的那部分。您可能会研究复杂的选择器,例如 [id^="MenuBarButton"],但如果您可以让稍微非 jQuery 的方式让您满意的话,这可能与您现在不太相关。
  • 有没有办法使用jQuery选择多个#?也就是说,HTML ID。因为它们必须是独一无二的,所以有没有办法做到$("#MenuBarButton*")
  • @Clonkex 是的。你会在我的最后一条评论;-) 中找到它。见the jQuery API
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 2018-12-17
相关资源
最近更新 更多