【问题标题】:Checkbox label not styling when checked选中时复选框标签没有样式
【发布时间】:2013-05-15 12:29:39
【问题描述】:

我正在尝试创建一个复选框标签,其中复选框本身被隐藏但标签没有因此单击标签,检查复选框,即使未显示。

我想要发生的是当它被选中时,标签保持红色,为此我为复选框活动分配了一个类,但它不起作用。它在悬停时工作正常,只是在不活动时工作。当我单击它时,复选框会选中,但标签不会读取活动类。

有什么想法吗?

我使用以下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;
}

【问题讨论】:

  • 请张贴打印出来的不带php的HTML,我们会发现你的错误,你在测试哪些浏览器?
  • @abimelex 更新问题,谢谢
  • 什么是#delHolder,因为您提供的代码中没有任何地方引用它
  • @freefaller #delHolder 只是一个按钮,显示他们是否点击了任何标签

标签: html css


【解决方案1】:

选择器.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

【讨论】:

    【解决方案2】:

    如果我的理解正确,我只是建议通过 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
    }
    

    【讨论】:

    • 谢谢,不幸的是,这不起作用 - 一个页面上有几个,所以所有 ID 都不同 - 并且不能添加通配符,因为这会改变所有这些跨度>
    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多