使用jQuery点击添加disabled类正常,点击其他按钮移除类失败求助
解决jQuery移除disabled类无效的问题
嘿,你的问题核心在于目标元素的引用没正确传递或获取,我来帮你搞定它!
问题分析
你在点击购物车图标的回调里用了局部变量$this存储当前元素,但这个变量只在那个回调函数内部有效——外部的reEnableBtn函数根本拿不到它。另外你提供的reEnableBtn代码没写完,大概率是没找到正确的目标元素才导致移除类失败。
解决方案
根据你的场景,分两种情况给出修复代码:
情况1:有多个购物车按钮(需要通过prodId定位)
如果页面上有多个购物车按钮,且prodId是每个按钮的唯一标识,建议给按钮添加data-prod-id属性来关联,这样就能精准找到对应元素:
// 点击购物车添加类的代码(修正拼写错误:finsihed → finished) $('.fa-shopping-cart').on('click',function(){ var $this = $(this).addClass('finished'); // 假设按钮上已有data-prod-id属性,比如 <i class="fa-shopping-cart" data-prod-id="123"></i> window.setTimeout(function(){ $this.addClass('disabled-button'); }, 1500); }); // 修复后的移除类函数 function reEnableBtn(prodId) { alert(prodId); // 通过prodId匹配对应的购物车按钮 var $targetBtn = $('.fa-shopping-cart[data-prod-id="' + prodId + '"]'); // 移除指定类名,按需移除finished类 $targetBtn.removeClass('disabled-button finished'); }
情况2:只有一个购物车按钮
如果页面上只有一个购物车按钮,直接把元素引用提升为全局变量,或者直接用选择器查找即可:
// 全局存储购物车按钮引用 var $cartBtn; $('.fa-shopping-cart').on('click',function(){ $cartBtn = $(this).addClass('finished'); window.setTimeout(function(){ $cartBtn.addClass('disabled-button'); }, 1500); }); function reEnableBtn(prodId) { alert(prodId); // 检查引用存在后移除类 if($cartBtn) { $cartBtn.removeClass('disabled-button finished'); } }
额外注意点
- 修正了你代码里的拼写错误:
finsihed→finished,避免后续样式失效; - 如果是多按钮场景,一定要用唯一标识定位,不然会误操作所有购物车按钮;
- 调用
reEnableBtn时,确保传入的prodId和按钮的data-prod-id完全匹配(注意字符串/数字类型一致)。
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

