Не могу установить ввод проверен = "проверен" через JQuery - PullRequest
5 голосов
/ 18 декабря 2010

У меня есть таблица, строки которой содержат группы переключателей, например:

<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()?

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

Проблема в том, что 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 .: Я предполагаю, что вы вызовете эту функцию один раз только во время загрузки страницы.

1 голос
/ 18 декабря 2010

Во-первых, и я не думаю, что это решит вашу проблему, используйте .attr('checked', 'checked').

Тогда я не уверен, что jQuery постоянно опрашивает переключатели, чтобы определить, нужно ли обновлять их ярлыки, но я бы предположил, что это не так. Используйте Firebug (или эквивалентный инструмент), и я уверен, что вы увидите, что флажки на самом деле проверяются в DOM, но стили меток не обновляются, чтобы отразить это.

Если это действительно так, вам нужно вручную добавить класс 'ui-state-active' к метке флажка, чтобы кнопка jQuery UI была выбрана. (Обязательно удалите этот же класс из всех других меток в наборе заранее.)

...