2010-12-17 38 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按钮被选中。 (请务必事先将该组中的所有其他标签删除。)