无法通过jQuery设置input checked =“checked”

时间:2010-12-17 21:08:00

标签: jquery jquery-ui radio-button each

我有一个表,其行包含单选按钮组:

<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 个答案:

答案 0 :(得分:2)

问题是因为buttonset隐藏带有span元素的单选按钮。将调用按钮设置移动到结束将解决您的问题。

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:我假设您只在页面加载期间调用此函数一次。

答案 1 :(得分:1)

首先,我认为这不会解决您的问题,请使用.attr('checked', 'checked')

然后,我不确定jQuery是否会不断轮询单选按钮以确定他们的标签是否需要更新,但我猜它不会。使用Firebug(或等效的工具),我敢打赌你会看到实际上在DOM中检查了复选框,但标签样式没有被更新以反映它。

如果确实如此,则需要手动将“ui-state-active”类添加到复选框的标签中,以便选择jQuery UI按钮。 (务必事先从集合中的所有其他标签中删除相同的类。)