jQuery点击逻辑异常:第二个emp-row初始赋值第一行内容
问题原因
- 全局变量污染:
img、name、check是全局变量,第一个emp-row操作后,这些变量会保留之前的取值。第二次点击第二个emp-row时,if(check)会直接执行,把旧值先赋给第二行,导致显示异常。 - 重复绑定事件:每次点击
emp-row都会给内部的employees绑定一次点击事件,多次操作后会触发多次回调,逻辑混乱。
修复方案
直接绑定employees的点击事件,通过DOM层级定位当前行对应的assign-btn区域,无需全局变量和外层emp-row的点击事件:
$(document).ready(function() { // 委托绑定employees的点击事件 $(document).on('click', '.employees', function() { // 获取当前选中员工的图片和名称数据 const img = $(this).find('.get-img').data('imgid'); const name = $(this).find('.get-name').data('name'); // 定位到当前行对应的assign-btn区域,更新内容 const $currentRow = $(this).closest('.emp-row'); $currentRow.find('.set-img').attr('src', img); $currentRow.find('.set-name').text(name); }); });
代码说明
- 事件委托优化:直接给
.employees绑定委托事件,避免重复绑定,每次点击员工项时直接触发回调。 - 局部变量隔离:将
img、name放在事件回调的局部作用域内,每个点击事件使用独立的变量,不会出现跨行数据干扰。 - 精准DOM定位:用
closest('.emp-row')找到当前点击项所属的行容器,确保只修改当前行的set-img和set-name元素,不会影响其他行。
额外规范修正
原HTML中多个empid使用了相同的id属性,违反HTML规范(id必须唯一),建议将id="empid"改为class="empid",避免DOM选择器出错。
内容的提问来源于stack exchange,提问作者imsh1vaay
相关产品推荐
相关产品推荐

