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

如何在jQuery的each(foreach)函数外部获取email变量?

嘿,这个问题本质是变量作用域的问题~你现在的email是在each的回调函数里用var声明的,属于局部变量,外部自然访问不到。我给你分两种常见场景来解决:

解决方案

场景1:只需要获取第一个选中的邮箱

如果你的需求是只取第一个被勾选元素的邮箱,那把email变量声明在each函数外面就行,找到目标后还可以跳出循环提升效率:

// 把变量声明在each外部,扩大作用域
let email = '';
$(".bulkclass").each(function(){ 
    if($(this).prop("checked") === true){ 
        const ischecked = 1; 
        const userkey = $(this).val(); 
        email = $(this).attr("data"); // 直接赋值给外部的email变量
        alert(email);
        return false; // 找到第一个符合条件的元素后,跳出each循环
    } 
});
// 现在外部可以正常使用email变量了
$("#mailToo").attr("href", "mailto:" + email);

场景2:需要获取所有选中的邮箱(支持多邮箱发送)

如果有多个被勾选的元素,mailto协议支持用逗号分隔多个收件邮箱,这时候可以用数组来收集所有邮箱,最后拼接成符合要求的格式:

// 用数组存储所有选中的邮箱
const emails = [];
$(".bulkclass").each(function(){ 
    if($(this).prop("checked") === true){ 
        const ischecked = 1; 
        const userkey = $(this).val(); 
        const email = $(this).attr("data");
        emails.push(email); // 将每个邮箱加入数组
        alert(email);
    } 
});
// 用逗号拼接数组元素,生成多邮箱的mailto链接
$("#mailToo").attr("href", "mailto:" + emails.join(','));

小建议

  • 尽量用let/const代替var,能避免不必要的全局变量污染(你代码里的ischecked和userkey也最好声明一下哦)
  • 自定义属性推荐用data-*的规范写法,比如把data改成data-email,这样可以用$(this).data("email")来获取,语义更清晰,也符合HTML标准。

内容的提问来源于stack exchange,提问作者Siva Ganesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:55:11