如何在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
相关产品推荐
相关产品推荐

