2011-05-12 128 views

回答

2

已经通过这个最近,它取决于你使用的是什么版本的jQuery。从1.6开始,具有原生属性(例如“checked”,“disabled”)的attr的功能(属性是应该存在或不存在的属性)会发生变化,因为它们可能会根据浏览器行为返回不一致的结果。

在1.6中设置或测试属性的正确方法是使用新的prop函数,该函数始终返回true或false。您使用的第二种方法也适用于测试。

7

当你请求ATTR检查,你没有得到一个布尔值:

// this would be correct 
if($(this).attr('checked') == 'checked') 

// jQuery 1.6+ 
if($(this).prop('checked')) 
+0

像所选我相信有浏览器和情况下,这将失败了。 (因此改变使用道具)。 – Hogan 2011-05-12 17:32:29

+0

该属性的值为布尔常量“true”是完全可以的 - 具体而言,它不**必须是“checked”字符串。在DOM中,属性确实是一个简单的布尔值。 – Pointy 2011-05-12 17:46:10

1

更重要的是,只要使用this.checked,它返回无论是 “真” 或 “假”。如果您已经拥有DOM节点,则无需使用jQuery。

+0

如果有jQuery替代品,我害怕使用任何原生JavaScript,因为我不知道它是否在一个浏览器中以一种方式运行,在另一个浏览器中以另一种方式运行。 jQuery帮助我确保我的代码是正常化的。 – 2011-05-14 19:20:14

+0

我明白了,大部分时间我都采用同样的方法。然而,'checked'属性是100%的跨浏览器,所以在这种特殊情况下,它将按预期工作。 – ehynds 2011-05-16 13:21:45

相关问题