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

时间:2009-10-09 15:24:34

标签: 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 [“someKey”]的值为“true”。

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

alert($('#check1').is(':checked') + " " + $('#check2').is(':checked'));

在Firefox(仅限Firefox)中,我的警告对话框将显示以下内容(它在所有其他浏览器中按预期工作):

Initial page load: true false
Normal refresh via Ctrl + R: false false
Refresh skipping cache via Ctrl + Shift + R: true false

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

为什么刷新时复选框值会在FF中更改,我该如何缓解这个问题?由于这似乎是一个仅限FF的错误,我如何更改我的代码才能使其正常工作?

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

编辑:我还应该指出,当在FF中刷新后呈现单选按钮时,它实际上并未显示显示,尽管HTML是什么告诉我。

Edit2 :根据请求添加原始HTML

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

6 个答案:

答案 0 :(得分:1)

我们可以看到生成的HTML吗?你真的在创建两个名为同名的单选按钮吗?

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

似乎问题不在于检查是否检查了单选按钮,而是更多的是他们的按钮实际上是未选中的,即使HTML代码另有说明。

我已向此here发布了一个后续问题,作为此主题的附录。

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

答案 4 :(得分:0)

我用这个来强制firefox重置刷新时检查的radiobuttons。

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

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

答案 5 :(得分:0)

当使用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
}