无法设置输入已检查=“已检查”通过 jQuery

发布于 2024-10-08 01:15:28 字数 2296 浏览 6 评论 0原文

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

<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-gsm 和 input.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()

I have a table whose rows contain radio button groups like so:

<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 & 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>

When the page loads (inside document.ready) I call this function to check the correct radio buttons, based on the above values for input.use-gsm and input.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);
        }

      });
    } 

For some reason setting .attr('checked',true) or even .attr('checked','checked') has no effect.

Am I using $.each() or .attr() incorrectly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

总攻大人 2024-10-15 01:15:28

问题是因为按钮集隐藏了带有 span 元素的单选按钮。将对按钮集的调用移至 end 可以解决您的问题。

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 */ 
    }

PS:我假设您只会在页面加载期间调用此函数一次。

Issue is because buttonset hides the radio buttons with span element. Moving teh call to buttonset to end would solve your problem.

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: I assume that you would call this function once only during the page load.

千紇 2024-10-15 01:15:28

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

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

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

First, and I don't think this will solve your issue, use .attr('checked', 'checked').

Then, I'm not sure if jQuery polls the radio buttons constantly to determine if their labels need to be updated, but I'd guess that it doesn't. Use Firebug (or equivalent tool) and I'll bet you'll see that the checkboxes actually are being checked in the DOM, but the label styles are not being updated to reflect it.

If that's indeed true, you need to manually add the 'ui-state-active' class to the checkbox's label so that the jQuery UI button appears to be selected. (Be sure to remove that same class from all other labels in the set beforehand.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文