.click() 回调引用调用方法中的局部变量,而不是按值复制

发布于 2024-09-01 02:38:14 字数 463 浏览 13 评论 0原文

以下 jQuery Javascript 代码包含在一个空页面上。

var element;
$(function() {
  for (var i = 0; i < 10; i++) {
    element = $('<div>' + i + '</div>');
    element.click(function() {
      alert(i);
    });
    $('body').append(element);
  }
});

期望的行为是,此代码应生成 10 个 div 元素,编号从 0 到 9。当您单击 div 元素时,警报弹出窗口将显示您单击的 div 元素的编号(即,如果用户单击 div 元素标记为“4”,警报弹出窗口应显示数字 4)。

无论单击哪个 div 元素,警报弹出窗口都会显示数字 10。

我如何修改此代码以使其按所需方式运行?

The following jQuery Javascript code is included on an otherwise empty page.

var element;
$(function() {
  for (var i = 0; i < 10; i++) {
    element = $('<div>' + i + '</div>');
    element.click(function() {
      alert(i);
    });
    $('body').append(element);
  }
});

The desired behavior is that this code should generate 10 div elements numbered from 0 to 9. When you click on a div element, an alert popup will show the number of the div element you clicked on (i.e. if a user clicks on the div element labeled '4', the alert popup should show the number 4).

The alert popup instead shows the number 10 regardless of which div element is clicked on.

How can I modify this code to make it behave in the desired way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

江心雾 2024-09-08 02:38:14

您需要将变量作为函数参数传递。

例如:

function buildElement(i) {
    var element = $('<div>' + i + '</div>');
    element.click(function() {
        alert(i);
    });
    $('body').append(element);
}

$(function() {
    for (var i = 0; i < 10; i++) {
        buildElement(i);
    }
});

您还可以使用内联匿名函数来执行此操作,如下所示:

$(function() {
    for (var i = 0; i < 10; i++) {
        (function(i) {
            var element = $('<div>' + i + '</div>');
            element.click(function() {
                alert(i);
            });
            $('body').append(element);
        })(i);
    }
});

You need to pass the variable as a function parameter.

For example:

function buildElement(i) {
    var element = $('<div>' + i + '</div>');
    element.click(function() {
        alert(i);
    });
    $('body').append(element);
}

$(function() {
    for (var i = 0; i < 10; i++) {
        buildElement(i);
    }
});

You can also do this with an inline anonymous function, like this:

$(function() {
    for (var i = 0; i < 10; i++) {
        (function(i) {
            var element = $('<div>' + i + '</div>');
            element.click(function() {
                alert(i);
            });
            $('body').append(element);
        })(i);
    }
});
烟燃烟灭 2024-09-08 02:38:14

通常我将数字隐藏在 id 中并以某种结构化方式将其取出:

$(function() {
    for (var i = 0; i < 10; i++) {
        element = $('<div id="id-'+i+'">' + i + '</div>');
        element.click(function() {
            alert($(this).attr('id').split('-')[1]);
        });
        $('body').append(element);
    }
});

Usually I hide the number in an id and get it out in some structured way:

$(function() {
    for (var i = 0; i < 10; i++) {
        element = $('<div id="id-'+i+'">' + i + '</div>');
        element.click(function() {
            alert($(this).attr('id').split('-')[1]);
        });
        $('body').append(element);
    }
});
苏别ゝ 2024-09-08 02:38:14

您可以做两件事中的一件。您可以使用 div 的内容来输出 is,或者您可以从选择器中获取数组中的索引。

这是内容的示例:

element.click(function() {
  alert($(this).text());
});

或索引的示例:

element.click(function() {
  alert($('div').index(this));
});

我相信两者都应该有效

You could do 1 of two things. You could use the contents of the div to output is or you could grab the index in the array from a selector.

This is an example for contents:

element.click(function() {
  alert($(this).text());
});

Or for the index:

element.click(function() {
  alert($('div').index(this));
});

I believe both should work

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文