2010-12-17 66 views
5

我有一個表,它的行包含單選按鈕組,像這樣:無法設置=「選中」通過jQuery

<td class="usegsm"> 
    <input type="hidden" class="use-gsm" value='<%# DataBinder.Eval(Container.DataItem, "use_gsm") %>' /> 
    <input type="hidden" class="use-gsm-lineup" value='<%# DataBinder.Eval(Container.DataItem, "use_gsm_lineup") %>' /> 
    <input type="radio" id="radio1-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>" name="radio-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>" class="events-lineups" /> 
    <label for="radio1-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>">Events &amp; Lineups</label> 
    <input type="radio" id="radio2-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>" name="radio-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>" class="events" /> 
    <label for="radio2-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>">Events</label> 
    <input type="radio" id="radio3-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>" name="radio-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>" class="none" checked="checked" /> 
    <label for="radio3-<%# DataBinder.Eval(Container.DataItem, "MatchId") %>">None</label> 
</td> 

頁面加載(內部的document.ready)我調用這個函數來檢查正確的單選按鈕,基於上述值input.use-gsminput.use-gsm-lineup

function setGsmButtonStates() { 
     $('td.usegsm').buttonset(); /* http://jqueryui.com/demos/button/#radio */ 
     $('td.usegsm').each(function(i) { 
     var use_gsm = $(this).children('input.use-gsm').val(); 
     var use_gsm_lineup = $(this).children('input.use-gsm-lineup').val(); 

     if (use_gsm == 'Y' && use_gsm_lineup == 'Y') { 
      $(this).children('input.events-lineups').attr('checked', true); 
     } 
     else if (use_gsm == 'Y' && use_gsm_lineup != 'Y') { 
      $(this).children('input.events').attr('checked', true); 
     } 
     else { 
      $(this).children('input.none').attr('checked', true); 
     } 

     }); 
    } 

出於某種原因,設置.attr('checked',true)甚至.attr('checked','checked')沒有效果。

我是不是正確使用$.each().attr()

+2

您正在使用'.attr()',我認爲這很好,這意味着問題可能不會被選中。 '.children()'只能匹配直接的孩子,請嘗試將其改爲'.find()'並查看它是否有效。 '.buttonset()'包裝輸入可能嗎? – Orbling 2010-12-17 21:12:43

+0

基於他的示例代碼,.children()應該返回正確的元素。 – simshaun 2010-12-17 21:19:26

回答

2

問題是因爲buttonset隱藏了帶有span元素的單選按鈕。將呼叫轉移到buttonset以結束將解決您的問題。

function setGsmButtonStates() { 
     $('td.usegsm').each(function(i) { 
     var use_gsm = $(this).children('input.use-gsm').val(); 
     var use_gsm_lineup = $(this).children('input.use-gsm-lineup').val(); 

     if (use_gsm == 'Y' && use_gsm_lineup == 'Y') { 
      $(this).children('input.events-lineups').attr('checked', true); 
     } 
     else if (use_gsm == 'Y' && use_gsm_lineup != 'Y') { 
      $(this).children('input.events').attr('checked', true); 
     } 
     else { 
      $(this).children('input.none').attr('checked', true); 
     } 

     }); 
      $('td.usegsm').buttonset(); /* http://jqueryui.com/demos/button/#radio */ 
    } 

P.S:我認爲你只會在頁面加載期間調用這個函數一次。

+0

GENIUS !!!它實際上將文本用包裝在標籤中,而不是輸入本身。我絕不會在一百萬年內想到這一點。無論如何,我仍然無法檢查單選按鈕的強制性,但視覺效果是我所追求的,因爲我沒有發佈表單。 – 2010-12-17 22:12:09

1

首先,我認爲這不會解決您的問題,請使用.attr('checked', 'checked')

然後,我不確定是否jQuery輪詢單選按鈕,以確定它們的標籤是否需要更新,但我猜測它沒有。使用Firebug(或等效工具),我敢打賭你會發現複選框實際上正在DOM中進行檢查,但標籤樣式並未更新以反映它。

如果確實如此,您需要手動將'ui-state-active'類添加到複選框的標籤,以便顯示jQuery UI按鈕被選中。 (請務必事先將該組中的所有其他標籤刪除。)