2009-10-09 25 views
0

检查我的网站上查询,我在我的ASP.NET MVC视图中创建像这样两个复选框:如果单选按钮在Firefox

Html.RadioButton("check", "true", "true" == (string) ViewData["someKey"], new { id = "check1"}); 
Html.RadioButton("check", "false", "false" == (string) ViewData["someKey"], new { id = "check2"}); 

我肯定计算机[“someKey”]的值为“真”。

在我的JS初始化函数,我进行以下检查:

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

在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-only错误,我怎样才能改变我的代码,使其工作?

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"/> 

回答

0

看来,问题不在于检查单选按钮是否被选中,但更多的是他们的按钮实际上没有选中,即使HTML代码另有说明。

我已经在这个主题上发布了后续问题here作为本主题的附录。

编辑This page对问题和解决方案有很好的描述。

+0

也许你应该澄清,这实际上是由于Firefox动态添加或删除输入字段时出现的错误:https://bugzilla.mozilla.org/show_bug.cgi?id = 539228 – 2011-02-08 14:25:06

0

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

+0

我给了这个镜头,它似乎没有帮助这个问题。这个问题似乎没有出现在任何其他浏览器(甚至没有IE!),所以我有点困惑,为什么Firefox会这样做。 – 2009-10-09 15:48:57

1

我们可以看到生成的HTML吗?你真的创造了两个单选按钮,同名具有相同的值吗?

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

+0

我添加了有问题的HTML。 – 2009-10-13 15:54:14

+0

呃,只是注意到我的原始代码并不是问题的表示。单选按钮具有相同的名称,但具有不同的值。 (道歉!) – 2009-10-13 15:58:23

+1

不幸的是我不能在FF3.0/3.5中用给出的代码重现这一点。有没有其他元素的ID或名称check1在那里?如果您跳过jQuery并询问'document.getElementById('check1')。checked',它会有所作为吗? – bobince 2009-10-13 17:41:22

0

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

我的情况很特殊,但我不得不返工的代码,考虑到这一点......

0

我用这个强制firefox重置刷新时检查的单选按钮。

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

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

0

我们已经有使用jquery更改选择时,在Firefox中出现类似的错误。即使代码根据萤火虫正确更改,但没有选中任何单选按钮。我们找到的解决方案是从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 
}