最近在作项目的过程当中碰到了这样的一个问题:在使用bootstrap模态框的过程当中,在模态框中有一个checkbox标签,一开始是为选中的,当点击触发模态框按钮,选中chcekbox时,会显示勾选,这个时候将选中的状态缓存起来,而后点击模态框中的关闭按钮,再次点击触发模态框按钮弹出模态框,这个时候问题出现了:bootstrap
checkbox标签已有checked=checked可是不显示勾选,查看图片:缓存
网上也查过有解决方案,就是将 $("...").attr("checked", true)改成$("...").prop("checked", true),问题解决,可是,问题是解决了,那么缘由是出如今哪里呢?函数
首先来了解下 jquey中的 attr()函数和prop()函数,attr()是处理 attribute的值的,而prop()是处理 property 的值的 ,jQuery 1.6以前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就致使告终果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值,那么归根结底,就是在处理 attribute 和 property。图片
不少attribute节点有一个相应的property属性,于是attribute和property很容易被混淆在一块儿,如某个div元素中的id和class既是attribute也有property,无论哪一种方式均可以访问和修改,可是对于自定义的attribute节点,或者自定义property,二者就没有关系了(可是在IE6-7中,二者仍是同样的,好奇葩的,希望咱们都能早日抛弃IE8如下的),须要注意的是,对于checked特性(attribute)不是对应它checked属性(property),attribute实际对应的是defaultChecked属性,并且仅用于设置复选框最初的值,checked的attribute不会由于复选框的状态而改变,而checked的property会由于复选框的状态而改变,因此在.attr()函数中,就算设置成了.attr("checked", true),也只是用来存储默认或者选中属性的默认值,却并不改变该复选框被选中和选中,这就是为何 checkbox标签已有checked=checked可是不显示勾选 的缘由所在class