为什么我的Radio先选中一个,再选中另一个的时候,之前的checked不会取消呢

图片描述

为什么我的Radio先选中一个,再选中另一个的时候,之前的checked不会取消呢

这里是html代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Tabs</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="wapper">
        <div class="tabs">
            <div class="tab-title">
                <ul>
                    <li>
                        <input type="radio" id="tab-control-1" checked="checked">
                        <a href="#tab-item-1">标签一</a>
                    </li>
                    <li>
                        <input type="radio" id="tab-control-2">
                        <a href="#tab-item-2">标签二</a>
                    </li>
                    <li>
                        <input type="radio" id="tab-control-3">
                        <a href="#tab-item-3">标签三</a>
                    </li>
                    <li>
                        <input type="radio" id="tab-control-4">
                        <a href="#tab-item-4">标签四</a>
                    </li>
                    <li>
                        <input type="radio" id="tab-control-5">
                        <a href="#tab-item-5">标签五</a>
                    </li>
                </ul>
            </div>
            <div class="tab-content">
                <section id="tab-item-1">
                    这是内容,这是内容。
                </section>
                <section id="tab-item-2">
                    这是内容,这是内容。
                </section>
                <section id="tab-item-3">
                    这是内容,这是内容。
                </section>
                <section id="tab-item-4">
                    这是内容,这是内容。
                </section>
                <section id="tab-item-5">
                    这是内容,这是内容。
                </section>
            </div>
        </div>
    </div>
</body>
</html>

这里是CSS代码

/* CSS Reset */
* {
    padding: 0;
    margin: 0;
    list-style: none;
    box-sizing: border-box;
}

body {
    background: #3498DB;
}

a {
    color: #000;
    text-decoration: none;
}

/* Tabs Start */

#wapper {
    width: 100%;
    max-width: 1000px;
    margin: 0 auto;
    margin-top: 200px;
}

.tabs {
    background: #fff;
    min-height: 400px;
    width: 100%;
    overflow: hidden;
}

.tab-title {
    line-height: 60px;
    overflow: hidden;
}

.tab-title ul li{
    cursor: pointer;
    float: left;
    width: 20%;
    height: 60px;
    position: relative;
    text-align: center;
}

.tab-title input {
    opacity: 0.5;
    position: absolute;
    z-index: 99;
}

.tab-title input,
.tab-title a {
    display: block;
    width: 100%;
    height: 60px;
}

.tab-title input:checked + a {
    background: #fff;
}

.tab-title ul li a {
    background: #f0f0f0;
    z-index: 9;
}

.tab-content {
    padding: 20px;
}
阅读 14.7k
6 个回答
<li>
    <input type="radio" id="tab-control-1" checked="checked">
    <a href="#tab-item-1">标签一</a>
</li>
<li>
    <input type="radio" id="tab-control-2">
    <a href="#tab-item-2">标签二</a>
</li>
<li>
    <input type="radio" id="tab-control-3">
    <a href="#tab-item-3">标签三</a>
</li>
<li>
    <input type="radio" id="tab-control-4">
    <a href="#tab-item-4">标签四</a>
</li>
<li>
    <input type="radio" id="tab-control-5">
    <a href="#tab-item-5">标签五</a>
</li>

问题在于你没有给他们命名,而且要命名相同的名字,这样radio就会在同名的一个组里保持一个或者零个被选中。

改成这样:

<li>
    <input type="radio" name="tag" id="tab-control-1" checked="checked">
    <a href="#tab-item-1">标签一</a>
</li>
<li>
    <input type="radio" name="tag" id="tab-control-2">
    <a href="#tab-item-2">标签二</a>
</li>
<li>
    <input type="radio" name="tag" id="tab-control-3">
    <a href="#tab-item-3">标签三</a>
</li>
<li>
    <input type="radio" name="tag" id="tab-control-4">
    <a href="#tab-item-4">标签四</a>
</li>
<li>
    <input type="radio" name="tag" id="tab-control-5">
    <a href="#tab-item-5">标签五</a>
</li>

他们得有相同的 name 属性才行。

input[type="radio"]是通过input的name属性来划分一组DOM节点的,只有当name相同时,这组input里面每次只能有一个被选中。

保证两个radio的name 相同即可

radio是通过name进行分组的,所以,一组中只有一个被选中

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进