我有一个表,其行包含单选按钮组:
<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>
当页面加载时(在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()
?
答案 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按钮。 (务必事先从集合中的所有其他标签中删除相同的类。)