You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将each函数中获取的数组传递到click函数中?

问题分析与解决方案

问题根源

你在click回调函数里声明了arr_color参数,这会遮蔽外部each作用域中的同名变量。因为jQuery的点击事件回调默认第一个参数是事件对象(Event),所以你打印的arr_color其实是事件对象,而非你定义的数组。

解决方案

方案1:利用闭包直接访问外部变量

去掉click回调里的arr_color参数,让回调函数直接访问each作用域中的变量(闭包会保留这个作用域):

$('.menu-colors_page > span').each(function () {
    var arr_color = [];
    arr_color.push($(this).attr('class'));

    $(this).click(function () { // 移除arr_color参数
         console.log(arr_color);
    });
});

方案2:简化变量(可选)

因为你这里只往数组里存了一个元素,完全可以不用数组,直接存字符串更简洁:

$('.menu-colors_page > span').each(function () {
    var colorClass = $(this).attr('class');

    $(this).click(function () {
         console.log(colorClass);
    });
});

方案3:显式绑定参数(复杂场景适用)

如果需要显式传递参数,可以用Function.prototype.bind()绑定参数,这种方式适合需要传递多个参数或改变上下文的场景:

$('.menu-colors_page > span').each(function () {
    var arr_color = [$(this).attr('class')];

    $(this).click(function (arr) {
         console.log(arr);
    }.bind(null, arr_color)); // 将arr_color作为第一个参数传入回调
});

原理说明

each循环的每一次迭代都会创建一个独立的作用域,回调函数(click事件处理函数)会通过闭包“记住”这个作用域里的变量,所以点击不同的span时,会访问到对应迭代时的变量值。

内容的提问来源于stack exchange,提问作者Nguyễn Triệu Cẩn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:07:49