如何在jQuery foreach循环中匹配认证用户ID?代码失效求助
问题修复方案
核心问题分析
- 变量作用域错误:
targetfound在$.each回调内部声明,外部无法访问,导致后续判断逻辑失效 - 类型不匹配隐患:后端输出的用户ID是数字,但前端用引号包裹成了字符串,可能导致相等判断异常
- 未初始化变量:如果循环中没有匹配项,
targetfound未被定义,会引发ReferenceError
修复后的代码
// 去掉引号,让user保持数字类型,避免类型不匹配 let user = <?= Auth::User()->id ?>; // 先在循环外初始化变量,确保外部能访问 let targetfound = false; $.each(data.postlikes, function(key, postliker){ // 用严格相等===判断,避免类型隐式转换问题 if(postliker.user_id === user){ targetfound = true; // 找到匹配项后直接跳出循环,提升性能 return false; } }); if(targetfound){ $('.posted-area').append('<button class="btn-primary" id="btnLiked" onclick="btnUnLikefunction()"> Liked!</button>'); }else{ $('.posted-area').append('<button class="btn-danger" id="btnLike" onclick="btnLikefunction()">Like </button>'); }
关键修复点说明
- 移除
user变量的引号,让其保持数字类型,和postliker.user_id类型统一,用===做严格相等判断 - 在
$.each循环外部初始化targetfound为false,确保无论是否匹配到,变量都有定义 - 找到匹配项后通过
return false跳出$.each循环,无需遍历剩余数据,提升效率 - 将
targetfound改为布尔值赋值,更符合“是否找到匹配项”的判断逻辑(原代码赋值为用户ID,属于冗余操作)
内容的提问来源于stack exchange,提问作者client BD
相关产品推荐
相关产品推荐

