2010-05-09 55 views
0

发现了一件奇怪的事情。下面的代码应该根据是否有一组复选框(全部具有属性名=“隐私”)被选中(例如,表单回发)为UI元素设置默认值。如果服务器发送的HTML中没有值(表单不是回发),则默认值应为firstMenuItemKey。否则,它应该是在底层HTML中检查的那个。jQuery'可能出现的缺陷':checked'selector(找不到复选框)

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

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

当我chaged选择器 '输入[名称=隐私] [检查检查=]',它的工作正常。这是在基于':checked'选择器的DOM检索的jQuery实现中的缺陷吗?我正在使用jQuery 1.4.2。

感谢您提供任何帮助。

+0

您是否还有其他名称为'name ='privacy'',例如单选按钮? – 2010-05-09 14:22:15

+0

你可以在函数内部传递给'each'并让它显示$(this).attr(“name”)+ this.tagName'吗?它在刷新时显示什么? – 2010-05-09 14:32:13

回答

0

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

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

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