2009-10-09 66 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 
}