Jquery操作checkbox全选、反选失效的问题解决

我们用JQuery操作checkbox,通常是采用attr方法来操控的,jQuery API明确说明,1.6+的jQuery要用prop,尤其是checkBox的checked的属性的判断,即

$("input[type='checkbox']").prop("checked"); 
$("input[type='checkbox']").prop("disabled", false); 
$("input[type='checkbox']").prop("checked", true); 

附一个判断全选、反选的代码片段


$("#check-all").on("click",function(){
            if($(this).is(":checked")){
                $(".check-item-mail").prop("checked","checked");
            }else{
                $(".check-item-mail").prop("checked", false);
            }
        });


### jQuery 中 `attr()` 方法失效原因分析 在特定场景下,`attr()` 方法可能无法按预期工作。对于表单元素的状态属性(如 `checked`, `selected`, 或者 `disabled`),应当使用 `prop()` 而不是 `attr()` 来设置或读取这些状态。 #### 表单元素状态属性的操作应采用 `prop()` 当处理像复框这样的表单控件时,如果尝试通过 `attr('checked')` 获取其中状态,则可能会返回未定义的结果[^1]。这是因为 `attr()` 主要用于操作 HTML 属性而非 DOM 属性;而诸如 `checked` 的布尔型属性实际上是属于后者的一部分,在这种情况下更推荐使用 `prop()` 函数来访问它们的真实值[^3]。 ```javascript // 正确的做法应该是这样: if ($(element).prop('checked')) { console.log("Checkbox is checked"); } else { console.log("Checkbox is not checked"); } ``` #### 修改后的全选功能实现方式 针对提到的全选/取消全选逻辑,可以调整为如下所示: ```javascript $('#selectAll').click(function(){ $('input:checkbox').not(this).prop('checked', this.checked); }); ``` 这里利用了 `.prop()` 方法正确设置了其他复框的择状态,并且解决了原问题中的 `undefined` 返回值情况。 #### 动态更新 `<video>` 标签源文件路径的方法 另外值得注意的是,对于多媒体元素来说,单纯更改子节点 `<source>` 的 `src` 并不会触发播放器自动刷新资源。因此需要调用父级 `<video>` 元素上的 `load()` 方法强制重新加载媒体流以应用新的 URL 地址[^2]。 ```javascript var video = $('#myVideo'); video.find('source').attr('src', newSrc); // 更新 source src 属性 video[0].load(); // 加载新视频 ``` 综上所述,为了确保代码能够稳定运行并达到预期效果,建议开发者们根据实际需求用合适的 API 接口——即对于涉及DOM属性的操作优先考虑 `prop()`,而对于HTML特性则继续沿用 `attr()`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值