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来终止。