jQ attr方法设置checked问题和如何终止each方法

jquery设置checkbox为checked状态不改变

参考文献:jquery设置checkbox为checked状态不改变的解决办法

在使用jQuery的attr方法设置checkbox为选择状态时发现只能生效一次

$(this).attr("checked", true);
//或者
$(this).attr("checked", checked);

而实际上当JQ的版本大于1.6时,我们应该用prop方法来设置checked的状态,这就涉及了dom中attributes和properties的区别以及以上提到的两个方法的区别。

attributes和properties,都可以理解为“属性”,在UML中Property更倾向于宏观的属性描述或属性的统指,Attribute则指具体的类的属性。

  • property 是DOM中的属性,是JavaScript里的对象;
  • attribute 是HTML标签上的特性,它的值只能够是字符串。

老版本的JQ的attr方法是有bug的,所以JQ团队对Attr模块进行了更新改进,在新的attributes和properties列表中,正常情况下,应该使用其对应的方法(见下面的列表)来取得和设置它们。

window或document中使用.attr()方法在jQuery1.6中不能正常运行,因为window和document中不能有attributes。它们包含properties(比如:location或readyState),必须使用.prop()方法操作或简单地使用javascript原生的方法。在jQuery1.6.1中,window和document中使用.attr()将被自动转成使用.prop,而不是抛出一个错误。

properties就是浏览器用来记录当前值的东西。正常情况下,properties反映它们相应的attributes(如果存在的话)。但这并不是boolean attriubutes的情况。当用户点击一个checkbox元素或选中一个select元素的一个option时,boolean properties保持最新。但相应的boolean attributes是不一样的,正如上面所述,它们仅被浏览器用来保存初始值。

所以prop()方法应该被用来处理boolean attributes/properties以及在html(比如:window.location)中不存在的properties。其他所有的attributes(在html中你看到的那些)可以而且应该继续使用.attr()方法来进行操作。

关于如何终止each方法

 $("#next").click(function(){
    $(".pagination > li").not($(".pagination > li:last")).not($(".pagination > li:last").prev()).each(function(){
            if ( $(this).hasClass("active"))
            {
               
                $(this).removeClass("active");
                $(this).next().addClass("active");
                return false; //终止each函数,与for循环和普通函数不同,不能用return或者break。
            }
            
        })
    })

在写分页的点击下一页按钮的时候发现“当前页面”样式没能正常移动到下一个li中。

是each函数一直在执行,造成后面每一个li都被remove和add,那么需要进入if语句即停止each函数。

尝试过break和return都没有用,因为在each方法中他们的作用只是终止本次循环,需要用return false来终止each循环。

JS,JQ应该还有一些方法也是这种操作,记得尝试用return false来终止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值