怎样实现点击.list-text内的文字,自动选中input框

改了一下radio的默认样式,现在该怎样实现原来的label绑定文字的功能?

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <style>
    .change-radio{
            position: relative;
            line-height: 30px;
        }

        input[type="radio"] {
            width: 20px;
            height: 20px;
            opacity: 0;
        }

        label {
            position: absolute;
            left: 5px;
            top: 3px;
            width: 20px;
            height: 20px;
            border-radius: 50%;
            border: 1px solid #999;
        }

        /*设置选中的input的样式*/
        /* + 是兄弟选择器,获取选中后的label元素*/
        input:checked+label {
            background-color: #fe6d32;
            border: 1px solid #fe6d32;
        }

        input:checked+label::after {
            position: absolute;
            content: "";
            width: 5px;
            height: 10px;
            top: 3px;
            left: 6px;
            border: 2px solid #fff;
            border-top: none;
            border-left: none;
            transform: rotate(45deg)
        }
.list{
    display:flex;
}
  </style>
</head>

<body>
    <div class='list'>
      <div class='list-text'>这是文字红红火火恍恍惚惚</div>
      <div class='change-radio'>
        <input id="item1" type="radio" name="item" value="选项一" checked>
        <label for="item1"></label>
        <span></span>
      </div>
    </div>
    <div class='list'>
      <div class='list-text'>这是文字红红火火恍恍惚惚</div>
      <div class='change-radio'>
        <input id="item2" type="radio" name="item" value="选项一" checked>
        <label for="item2"></label>
        <span></span>
      </div>
    </div>

</body>

</html>
阅读 2.8k
4 个回答

css就可以,你给你的css样式的label起个别名,再添加一个功能性label
也可以使用js
js:

    var list = document.querySelectorAll('.list-text');
    list.forEach(function(item){
        item.onclick = function(e){
            e.target.nextElementSibling.firstElementChild.checked = true
        }
    })

尝试下把所有的都包进 label 里

<label class='list' for="item2">
  <div class='list-text'>这是文字红红火火恍恍惚惚</div>
  <div class='change-radio'>
    <input id="item2" type="radio" name="item" value="选项一" checked>
    <span></span>
  </div>
</label>

这种结构你直接用label包含进去就可以了。

<ul>
  <li>
    <label>
      <input type="radio" style="display:none;"/>
      <span>item</span>
    </label>
  </li>
</ul>

<label>标签有个for属性,通过for属性可以绑定对应的<input>标签,点击之后会跳到input输入框。建议文字用label标签包裹起来。

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