在我的网站上,我在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"/>
答案 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
}