javascript - 通过 jQuery 设置元素的 onclick 处理程序时如何获取变量的文字值?

标签 javascript jquery

有没有办法能够获取传递给 click() 函数的文字值?

<script>
var texts = ['t1', 't2', 't3', 't4', 't5'];

$(document).ready(function () {
    for (var i = 0; i < texts.length; i++) {
        var div = $("<div>");
        div.click(function () {

            div.text(texts[i]); // <---- problem here
            console.log(texts[i]); //   with texts[i]
        });

        $("#container").append(div);
    }
});
</script>

<div id="container"></div>

预期结果:

5 个 div 元素,每个元素分别包含文本“t1”、“t2”等

每个 5 个 div 元素,单击时将文本“t1”、“t2”等输出到控制台。

替代解决方案 1:

$(document).ready(function () {
    for (var i = 0; i < texts.length; i++) {
        var div = $("<div>");
        div.click({index: i}, function (e) {
            div.text(e.data.index);
            console.log(e.data.index);
        });

        $("#container").append(div);
    }
});

替代解决方案 2:

可以添加一个函数来设置 onclick 事件处理程序中的文本:

function setClick(elem, text) {
    elem.click(function () { console.log(text); });
}

这样div.click( ... );替换为:

setClick(div, i);

最佳答案

问题是当你点击div时,此时i的值为5,因此你不会得到任何结果。您应该在此函数中使用 IIFE 并包装单击调用。像这样

$(document).ready(function () {
    for (var i = 0; i < texts.length; i++) {
        var div = $("<div>");
        div.click((function () {

            div.text(texts[i]); // <---- problem here
            console.log(texts[i]);
        })(i));

        $("#container").append(div);
    }
});

关于javascript - 通过 jQuery 设置元素的 onclick 处理程序时如何获取变量的文字值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710524/

相关文章:

JavaScript 不检测动漫 js

javascript - jQuery css 瞬间附加到 iframe

javascript - 将所有样式从一个元素复制到另一个元素

jquery - 从 wmd 文本编辑器 TEXTAREA 中的数据库驱动文本中删除 html <tags>

javascript - 使每次调用返回的匿名函数成为相同的实例

javascript - 如何在 phonegap 中打开系统文件资源管理器

javascript - 找不到模块 : Can't resolve 'autosuggest-highlight/match'

javascript数组 - 在给定键处增加值

jquery - IE9、jQuery 1.6.1 和 .load()

javascript - 如果另一个已经被触发,则仅触发一次