jQuery 1.6中可能存在的错误 - $(...)。attr(“checked”)无法正常工作

时间:2011-05-11 19:33:30

标签: jquery jquery-1.6

我的表单上有两个单选按钮,直到我开始使用jQuery 1.6,以下代码运行良好:

<input type="radio" id="radio1" name="test"/>
<input type="radio" id="radio2" name="test"/>
<input type="button" onclick="testcheck()" value="Test"/>
<script>
function testcheck()
{
    if (jQuery("#radio1").attr("checked"))
        alert("first button checked");
    else if (jQuery("#radio2").attr("checked"))
        alert("second button checked");
    else
        alert("none checked")      
}
</script>

一旦我开始使用jQuery 1.6,它总是显示“none checked”,因为jQuery(radiobutton).attr("checked")始终为空。

看看这个jsfiddle,并在1.5.2和1.6之间更改jQuery版本,看看我的意思。

6 个答案:

答案 0 :(得分:8)

看看这个问题:.prop() vs .attr()

请尝试使用此代码:

function testcheck()
{
    if (jQuery("#radio1").prop("checked"))
        alert("first button checked");
    else if (jQuery("#radio2").prop("checked"))
        alert("second button checked");
    else
        alert("none checked")      
}

同样在最新的jQuery 1.6.1,他们修复了一些1.6 attr问题

答案 1 :(得分:3)

这不是一个错误,而是一个改变:

http://christierney.com/2011/05/06/understanding-jquery-1-6s-dom-attribute-and-properties/

另外,正如@Neal所说,他们在最新的1.6.1 release candidate中对此进行了一些研究。

来自RC链接:

  

从1.5.2升级到1.6.1 - 随着   介绍新的.prop()方法   和.attr()方法的更改,   jQuery 1.6引发了一场讨论   属性和。之间的区别   属性以及它们与每个属性的关系   其他。它也有一些   向后兼容性问题   已在1.6.1中修复。什么时候   你从1.5.2更新到1.6.1   不应该改变任何代码。

那里有更多解释,但你可以跳到1.6.1并且没问题......

编辑 - 在2011年5月16日添加

John Resig只是权衡了围绕这个做出的变化以及为什么......好好阅读......

http://ejohn.org/blog/jquery-16-and-attr/

答案 2 :(得分:3)

我也一直在看这个。其他答案有一些见解,为什么会这样,什么时候它会被还原(只有吸气者?);与此同时,我一直在使用

$('#thingy').is(':checked');

作为跨版本的解决方法。

希望这有帮助!

答案 3 :(得分:0)

我无法解释版本之间的变化,但有一个专门寻找选择的选择器 - http://api.jquery.com/checked-selector/

答案 4 :(得分:0)

你可以这样破解:jQuery("input[name='test']:checked")

演示:

http://jsfiddle.net/8Eqpu/15/

答案 5 :(得分:0)

.attr().data()在jQuery 1.6中发生了巨大变化。

本文更好地解释了:

Upgrading to jQuery 1.6: Problems you may face

希望这会有所帮助。干杯