这是我的单选按钮:
<input type="radio" name="mode" id="mode_add" checked="checked" />ADD
<input type="radio" name="mode" id="mode_del" />DEL
我现在正在学习jQuery,为此,我正在改变单选按钮状态的测试
// Test whether DEL is checked.
if(document.getElementById('mode_del').checked) { ... }
到jQuery。我的第一次尝试失败了,但我不明白为什么:
// VARIATION 1 - THIS DOES NOT WORK (always false):
if($('#mode_del').attr('checked')) { ... }
接下来,我搜索了一个有效的解决方案,但我不明白为什么:
// VARIATION 2 - THIS WORKS
if($('#mode_del').is(':checked')) { ... }
最后,我在jQuery文档中找到了一个解释,它的工作原理我明白了:
// VARIATION 3 - THIS WORKS TOO
if($('#mode_del:checked').val()) { ... }
当然,至于我的申请,我对自己拥有的东西感到满意,但为了满足我的好奇心:
(A)是否正确,在我的第一个解决方案中,我只询问HTML元素是否具有名为“checked”的属性,但这与用户是否选择了单选按钮这一事实无关?
(B)为什么解决方案2有效?我没有找到“是”功能的文档。
答案 0 :(得分:3)
在相同的jQuery文档中,它解释了:
To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method
。
属性和属性之间的区别是:
HTML属性对应于HTML文件 - 静态 - 属性值对应于DOM - 这是动态的。
例如,当用户在文本框中键入值时,属性不会更改。它将始终是默认值(这解释了为什么mode_del属性始终显示为false)。
但财产改变了。
<input type="radio" name="mode" id="mode_del" />DEL
默认情况下,属性checked
和属性checked
均为false。但是,当用户点击收音机时,它的属性会改变,但属性不会改变。
因此,最好使用prop()
方法检索复选框的值,文本框中的值等。正如documentation
答案 1 :(得分:1)
以下是文档:.is()。
如果选择器(在您的情况下为.is()
)满足至少其中一个元素(选择器返回的元素),则全局':checked'
返回true。 / p>
引用: 说明:根据选择器,元素或jQuery对象检查当前匹配的元素集,如果至少有其中一个元素,则返回true匹配给定的参数。
答案 2 :(得分:1)
首先,这是is()
的文档其次,要使您的jquery变体1生效,请检查输入的属性checked
是否等于文本"checked"
// VARIATION 1 - THIS DOES NOT WORK (always false):
if($('#mode_del').attr('checked') == 'checked') { ... }