首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jquery无法让我理解这一点

Jquery无法让我理解这一点
EN

Stack Overflow用户
提问于 2011-06-27 23:23:27
回答 4查看 171关注 0票数 3

在3个alert(i)上运行div onclick绑定行,但当单击所有这些行时,都会警告i的最后一个设置值。我希望我试图做的事情是有意义的,这很难解释。它不是提醒1、2或3,而是提醒3、3、3。

代码语言:javascript
复制
// Updates bar preview box
this.updatePropertyMarkerBox = function(self, BarsID) {

    ... snip ...

    // Loop  and add event handler
    for (var i = 0; i < self.bars[BarsIndex].markers.length; i++) {

        // Add click event
        $("#bmi-" + self.containerId + "-" + i).bind('click', function() {
            alert(i);
        });
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-27 23:25:40

当您在for循环中迭代时,您实际上得到了i的地址,如果您当时在for循环中使用它,它将是预期的值,但是如果您稍后使用它(例如在单击事件中),它将指向最终递增的值3。要获得期望的效果,您可以创建一个匿名函数,如下所示

代码语言:javascript
复制
for (var i = 0; i < self.bars[BarsIndex].markers.length; i++) (function(i) {

    // Add click event
    $("#bmi-" + self.containerId + "-" + i).bind('click', function() {
        alert(i);
    });
})(i)
票数 5
EN

Stack Overflow用户

发布于 2011-06-27 23:27:07

代码语言:javascript
复制
    $("#bmi-" + self.containerId + "-" + i).bind('click', (function(i) {
        return function() {
            alert(i);
        };
    })(i));
票数 2
EN

Stack Overflow用户

发布于 2011-06-27 23:29:44

虽然您可以在循环中使用invoke函数,创建一个新的变量作用域来捕获i的当前值,但另一种方法是直接从元素的ID属性中获取i值:

代码语言:javascript
复制
for (var i = 0; i < self.bars[BarsIndex].markers.length; i++) {

    $("#bmi-" + self.containerId + "-" + i).bind('click', function() {
          //grab the number from the ID of the element
        alert( /\d+$/.exec( this.id )[0] );
    });
}

示例: http://jsfiddle.net/UGQA7/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6495156

复制
相关文章

相似问题

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