jQuery Check单选按钮:为什么必须这样做

时间:2013-12-24 14:46:20

标签: jquery

这是我的单选按钮:

<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有效?我没有找到“是”功能的文档。

3 个答案:

答案 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') { ... }