Javascript 检查Firefox中是否选中了单选按钮

Javascript 检查Firefox中是否选中了单选按钮,javascript,jquery,asp.net-mvc,firefox,Javascript,Jquery,Asp.net Mvc,Firefox,在我的网站上,我在ASP.NET MVC视图中创建了两个复选框,如下所示: Html.RadioButton("check", "true", "true" == (string) ViewData["someKey"], new { id = "check1"}); Html.RadioButton("check", "false", "false" == (string) ViewData["someKey"], new { id = "check2"}); 我确信ViewData[“so

在我的网站上,我在ASP.NET MVC视图中创建了两个复选框,如下所示:

Html.RadioButton("check", "true", "true" == (string) ViewData["someKey"], new { id = "check1"});
Html.RadioButton("check", "false", "false" == (string) ViewData["someKey"], new { id = "check2"});
我确信ViewData[“someKey”]中的值为“true”

在我的JS init函数中,我执行以下检查:

alert($('#check1').is(':checked') + " " + $('#check2').is(':checked'));
在Firefox(仅Firefox)中,“我的警报”对话框将显示以下内容(它在其他浏览器中正常工作):

我尝试了许多不同的方法来查看复选框值,包括
$('#check1').attr('checked')
,但没有成功。如果我检查Firebug中的HTML,我可以看到第一个单选按钮中有属性
checked=“checked”

为什么刷新时FF中的复选框值会发生变化,如何缓解这种情况?既然这似乎是一个仅限FF的bug,我如何更改代码以使其正常工作

似乎提出了类似的问题,但在这种情况下,所提出的解决方案似乎都不起作用

编辑:我还应该指出,在FF中刷新后呈现单选按钮时,它实际上也没有显示为选中状态,不管HTML告诉我什么

Edit2:根据请求添加原始HTML

<input id="check1" type="radio" value="True" name="check" checked="checked"/>
<input id="check2" type="radio" value="False" name="check"/>


听起来您的脚本可能会在页面完全加载之前运行。你把Javascript代码放在哪里了?如果还没有,请尝试将代码移动到
块的末尾。

我们可以看到生成的HTML吗?您是否真的创建了两个具有相同名称和相同值的单选按钮


请记住,当您点击“刷新”时,浏览器会在刷新之前尝试保留页面的表单字段内容。这包括单选按钮状态。如果您有两个无法区分的单选按钮,这似乎是混淆试图重新建立表单状态的浏览器的好方法。

我几天前也遇到了同样的问题,问题是我在项目完全加载或呈现之前进行了“检查”,我使用jQuery呈现的是DropDownList


我的案例非常具体,但我不得不重新编写代码来考虑这一点……

问题似乎不在于检查单选按钮是否被选中,而在于它们的按钮实际上被取消选中,即使HTML代码中另有说明

我已经发布了一个后续问题,作为这个主题的补充


编辑:很好地描述了问题以及您可以采取的解决方案。

我用它强制firefox在刷新时重置选中的单选按钮

$(function(){ $('input[name="radiobuttongroup"]')[0].checked = true; });

其中[0]是特定组中radiobutton的索引([0]=第一个单选按钮,[1]=第二个单选按钮,…)

当使用jquery更改选择时,firefox中出现了类似的错误。即使代码根据firebug正确更改,也没有选择任何单选按钮。我们找到的解决方案是从DOM中删除单选按钮并将其放回原处

var allradiobuttons = $('...');
allradiobuttons.click(function() {
  var radiobutton = $(this);
  allradiobuttons.removeAttr("checked");

  radiobutton.attr("checked", "checked");
  var parent = radiobutton.parent();
  parent.html(parent.html()); // This is a weird fix
}

我试了一下,似乎对这个问题没有帮助。这个问题似乎没有出现在任何其他浏览器中(甚至IE!),所以我有点困惑Firefox为什么会这样做。我添加了令人不快的HTML。呃,只是注意到我的原始代码没有指出这个问题。单选按钮的名称相同,但值不同。(抱歉!)不幸的是,我无法用给出的代码在FF3.0/3.5中重现这一点。没有id或名称为check1的其他元素,是吗?如果跳过jQuery并询问document.getElementById('check1')。checked是否有区别?不,无论我如何检查都没有区别。奇怪的是,单选按钮在正常刷新时呈现为未选中状态(因此我认为JS实际上是正确的——按钮是“未选中的”,即使没有其他具有相同ID的按钮),但在缓存跳过刷新时,一切正常。也许您应该澄清,这实际上是由于在动态添加或删除输入字段时出现的Firefox错误造成的:
var allradiobuttons = $('...');
allradiobuttons.click(function() {
  var radiobutton = $(this);
  allradiobuttons.removeAttr("checked");

  radiobutton.attr("checked", "checked");
  var parent = radiobutton.parent();
  parent.html(parent.html()); // This is a weird fix
}