求助:通过类名与data属性选中jQuery元素并设置禁用的代码无效
问题解决:通过类名+data属性禁用按钮
你的代码存在两处可优化的点,调整后即可正常工作:
方案1:直接操作触发事件的元素(最简洁高效)
点击事件绑定在目标按钮上,直接用$(this)就能获取当前点击的按钮,无需通过选择器重新查找:
<button type="button" data-pid="23" class="add" tabindex="0">click me</button> <script> $(".add").on("click", function(e) { e.preventDefault(); // 直接操作当前点击的按钮,设置disabled状态 $(this).prop("disabled", true); }); </script>
方案2:保留类名+data属性选择器的写法
如果确实需要通过选择器定位元素,注意规范选择器的引号写法,同时改用prop()设置状态:
<button type="button" data-pid="23" class="add" tabindex="0">click me</button> <script> $(".add").on("click", function(e) { e.preventDefault(); var pid = $(this).data('pid'); // 用data()方法获取data属性更规范 $('.add[data-pid="' + pid + '"]').prop("disabled", true); }); </script>
关键说明
- 对于
disabled这类布尔属性,jQuery官方推荐使用prop()方法而非attr():prop()直接操作DOM元素的状态属性,能准确设置和读取布尔值;attr()操作的是HTML标签上的属性,处理布尔属性时易出现状态不一致问题。 - 使用
$(this)可避免重复查找DOM元素,提升代码效率,同时减少选择器写错的概率。
内容的提问来源于stack exchange,提问作者Ziad Nassar
相关产品推荐
相关产品推荐

