我正在使用这个论坛上发现的一种简短的纯CSS方法,在我开发的在线应用程序中使用我自己设计的复选框和单选按钮。
我的做法是隐藏单选框和复选框,并在标签中以我的图形作为背景显示,如下所示:
input[type="radio"] {
display: none;
}
input[type="radio"] + label {
display: block;
padding: 8px 4px 8px 22px;
background: url(../img/filter-checks.png) 0 0 no-repeat;
}
input[type="radio"]:checked + label {
background-position: -30px 0;
}
显然,在复选框方面我使用了类似的方法。它运作得很好,但不幸的是IE8不能处理:checked属性。
我正在尝试通过jQuery来解决这个问题,让它检测单选按钮是否被选中,然后添加一个类"checked"并将相同的CSS分配给它。
$('input[type="radio"],input[type="checkbox"]').each(function() {
if ($(this).is(':checked')) {
$(this).addClass('checked');
}
else {
$(this).removeClass('checked');
}
});
很不幸,虽然我发现很多帖子说is(':checked')在IE8中应该有效,但对我来说它并没有起作用。我可以看到在其他任何浏览器中单击radiobutton时,类"checked"被添加或移除,但在IE8中却没有。
有没有解决方案或替代方法来查找IE8中的radiobutton或checkbox是否被选中?
----------更新08-07 9:30-------------
经过一些重新考虑,我完全重写了我的代码,专门针对radio-button,并省略了:checked这个东西。现在我发现真正的问题似乎是addClass在IE8中不起作用 >(。
我的新jquery:
$('input[type="radio"]').click(function() {
var radioName = $(this).attr('name');
$(this).parent('.form-check').css('background-color', '#ff0000');
$(this).parent('.form-check').addClass('checked');
$('input[type="radio"][name="' + radioName + '"]').not(this).parent('.form-check').css('background-color', 'transparent');
$('input[type="radio"][name="' + radioName + '"]').not(this).parent('.form-check').removeClass('checked');
});
红色背景是为测试添加的。它们有效,但addClass没有效果... 有什么好的想法吗?
---------- 更新08-07 10:00 ------------
不用理会... IE8开发工具显然还不够完善,无法即时显示类名的更改。该函数可以正常工作,但我的CSS没有生效。
input[type="radio"]:checked + label,
.checked input[type - "radio"] + label {
background-position: -30px 0;
}
当IE8无法理解第一行中的:checked时,它将不会读取第二行或整个语句。这是我的错误。
此外,当单选按钮本身具有display:none属性时,它们对于IE8来说不存在,因此无法被定位。
回到起点重新设计。
$('#yourelement').prop('checked')
返回的是 true 还是 false? - Sumurai8