我正在尝试创建一个复选框标签,其中隐藏了复选框,但标签没有点击标签,检查复选框,即使没有显示。
我想要发生的是当它被检查时,标签保持红色,为此我为复选框激活分配了一个类,但它不起作用。它只在不活动时悬停工作正常。当我单击它时,复选框会检查,但标签不会读取活动类。
有什么想法吗?
我使用以下html:
<div class="gl_delete">
<div class="deleteCB">
<input id="uImgId47" type="checkbox" name="uImgId[]" value="47"></input>
<input type="hidden" name="filename[]" value="6_246f0548d62b9b9cc19210389ef09472.jpg"></input>
<label onclick="$('#delHolder').show()" for="uImgId47"> X </label>
</div>
</div>
以下css
.deleteCB {
width: 20px;
margin: 20px auto;
}
.deleteCB label, .deleteCB label:after {
cursor: pointer;
position: absolute;
font-weight:bold;
font-size:14px;
content: 'x';
line-height:14px;
position: absolute;
border-radius:6px;
padding-left:9px;
padding-top:3px;
color:#fff;
width: 17px;
height: 21px;
background: #ccc;
border:1px solid #ccc;
top: -1px;
right: -1px;
padding-bottom:0;
}
.deleteCB label:after {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
opacity: 0;
color:#fff;
background: #cc3333;
border:1px solid #cc3333;
}
.deleteCB label:hover::after {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
filter: alpha(opacity=100);
opacity: 1;
}
.deleteCB input[type=checkbox]:checked + label:after {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: alpha(opacity=100);
opacity: 1;
}
/* hide checkbox */
input[type=checkbox] {
visibility: hidden;
}
答案 0 :(得分:2)
选择器.deleteCB input[type=checkbox]:checked + label:after
使用相邻的同级选择器+
,这意味着它正在input[type=checkbox]:checked
元素之后直接选择标签
这不起作用,因为复选框和标签元素之间还有另一个input
元素 - 所以你的选择器实际上是:
.deleteCB input[type=checkbox]:checked + input[type=hidden] + label:after
相反,你也可以使用通用兄弟组合器,它选择出现在后面的所有元素:
.deleteCB input[type=checkbox]:checked ~ label:after
以下是有关兄弟选择器的更多信息:CSS Tricks: Child and Sibling Selectors
答案 1 :(得分:0)
如果我理解你的话,我只是建议通过JavaScript在你的标签上添加一个类,而不是仅仅依靠CSS。你的标签上已经有一个onclick
处理程序了,所以我建议在点击它时调用一个函数来处理你已经处理过的show()
方法,并在你的标签上添加一个类
例如,HTML:
<label id="labelImgId47" onclick="onLabelClick()" for="uImgId47">...</label>
...和JavaScript:
function onLabelClick() {
$('#delHolder').show();
$('#labelImgId47').addClass('active');
}
如果用户可以打开/关闭复选框,则可以添加条件逻辑以检查其是否已选中,并在需要将框显示为未选中时使用jQuery removeClass()
函数。
然后在CSS中,您可以使用active
类来设置标签样式:
.deleteCB label.active {
// Your styles here
}