jQuery':checked'选择器可能存在缺陷(当没有时查找复选框)

时间:2010-05-09 13:56:34

标签: javascript jquery

发现了一件奇怪的事情。以下代码应该基于是否检查一组复选框(都具有属性名称=“隐私”)中的一个(例如,表单回发)来为UI元素设置默认值。如果服务器发送的HTML中没有值(表单不是回发),则默认值应为firstMenuItemKey。否则,它应该是在基础HTML中检查的那个。

但是,虽然这适用于第一次调用包含表单的URL,但刷新页面会将defaultPrivacyValue的值设置为其中一个隐私复选框。我已经检查过服务器在脚本运行之前没有检查复选框(事实并非如此)。我还检查了脚本中的其他地方是否正在检查复选框(它不是)。

var defaultPrivacyValue = firstMenuItemKey;
$('input[name=privacy]:checked').each(function() {
     defaultPrivacyValue = $(this).next().find('.name').text();
});
selectMenuItem(defaultPrivacyValue);

当我将选择器变为“输入[name = privacy] [checked = checked]”时,它按预期工作。这是基于':checked'选择器的DOM检索的jQuery实现中的缺陷????我正在使用jQuery 1.4.2。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

刷新页面上,Firefox会保留表单字段的值,包括复选框的选中状态。这可能是导致问题的原因:Firefox正在检查复选框的已检查状态,而不是单独的脚本。

我认为Webkit没有这种行为,我不确定IE。因此,测试此假设的一种方法是在Safari或Chrome中检查您的页面。

然而,我不确定为什么[checked = checked]选择器的工作方式不同。