javascript - 我必须如何更改我的代码?

标签 javascript jquery html css checkbox

每当我想单击标签时,我的子级元素都会显示它没关系,这是我想要的,但是如果我单击复选框(而不是标签),我的复选框应该被选中或者通过其他方式它必须是一个填充的检查标记(如果我点击标签,我的复选框必须是空的)。

这篇文章是我上一篇文章的解释,我想这是不可能做到的,我必须改变我的结构来做我想做的事

codepen demo

我的html

  <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>No Title</title>
    </head>
    <body> 

    <div class="my-checkbox">

     </div>

      <div class="new-checkbox">
        <ul>
          <li class="hasUl">
            <input type="checkbox" id="input1">
            <label for="input1">kategori <strong>(1)</strong>
            </label>
            <ul>
              <li>
                <input type="checkbox" id="input11">
                <label for="input11">kategori<strong>(11)</strong>
                </label>
              </li>
              <li>
                <input type="checkbox" id="input12">
                <label for="input12">kategori <strong>(12)</strong>
                </label>
              </li>
              <li>
                <input type="checkbox" id="input13">
                <label for="input13">kategori <strong>(13)</strong>
                </label>
              </li>
            </ul>
          </li>
          <li>
            <input type="checkbox" id="input2">
            <label for="input2">kategori <strong>(2)</strong>
            </label>
          </li>
          <li class="hasUl">
            <input type="checkbox" id="input3">
            <label for="input3">kategori <strong>(3)</strong>
            </label>
            <ul>
              <li>
                <input type="checkbox" id="input31">
                <label for="input31">kategori <strong>(31)</strong>
                </label>
              </li>
              <li>
                <input type="checkbox" id="input32">
                <label for="input32">kategori <strong>(32)</strong>
                </label>
              </li>
              <li>
                <input type="checkbox" id="input33">
                <label for="input33">kategori <strong>(33)</strong>
                </label>
                <ul>
                  <li>
                    <input type="checkbox" id="input331">
                    <label for="input331">kategori <strong>(331)</strong>
                    </label>
                  </li>
                  <li>
                    <input type="checkbox" id="input332">
                    <label for="input332">kategori <strong>(332)</strong>
                    </label>
                  </li>
                  <li>
                    <input type="checkbox" id="input333">
                    <label for="input333">kategori <strong>(333)</strong>
                    </label>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
    </div><!-- new checkbox-->

    <script type="text/javascript" src="https://cdn.anitur.com.tr/js/jquery-1.8.2.min.js" ></script>

    </body>
    </html>

我的CSS

 .new-checkbox ul {
      padding: 0;
      margin: 0;
      list-style: none;
      margin-left: 30px;
      font: normal 11px/16px"Segoe UI", Arial, Sans-serif;
    }
    .new-checkbox ul:first-child {
      margin-left: 0;
    }
    .new-checkbox ul li {
      margin: 3px 0;
    }
    .new-checkbox input[type="checkbox"] {
      display: none;
    }
    .new-checkbox label {
      cursor: pointer;
    }
    .new-checkbox input[type="checkbox"] + label:before {
      border: 1px solid #ffffff;
      content: "\00a0";
      display: inline-block;
      font: 16px/1em sans-serif;
      height: 13px;
      width: 13px;
      margin: 2px .25em 0 0;
      padding: 0;
      vertical-align: top;
      border: solid 1px #1375b3;
      color: #1375b3;
      opacity: .50;
    }
    .new-checkbox input[type="checkbox"]:checked + label:before {
      background: #fff;
      color: #1375b3;
      content: "\2714";
      text-align: center;
      box-shadow: 0 0 2px rgba(0, 0, 0, .25) inset;
      opacity: 1;
    }
    .additional:before{
       border: 1px solid #ffffff;
      content: "\00a0" !important;
      display: inline-block;
      font: 16px/1em sans-serif;
      height: 13px;
      width: 13px;
      margin: 2px .25em 0 0;
      padding: 0;
      vertical-align: top;
      border: solid 1px #1375b3;
      color: #1375b3;
      opacity: .50;
    }
    .new-checkbox input[type="checkbox"]:checked + label:after {
      font-weight: bold;
    }
    .new-checkbox ul li:before {
      content: "\25b6";
      display: inline-block;
      margin: 2px 0 0;
      width: 13px;
      height: 13px;
      vertical-align: top;
      text-align: center;
      color: #e74c3c;
      font-size: 8px;
      line-height: 13px;
      cursor: pointer;
    }
    li.parent.has-checked:before {
      content: "\25bc" !important;
      display: inline-block;
      margin: 2px 0 0;
      width: 13px;
      height: 13px;
      vertical-align: top;
      text-align: center;
      color: #e74c3c;
      font-size: 8px;
      line-height: 13px;
      cursor: pointer;
    }

    .new-checkbox li {
      -webkit-user-select: none;
      -moz-user-select: none;
      user-select: none;
    }
    .new-checkbox input[type="checkbox"][id]:checked ~ li::before {
      content: "\25bc";
    }
    .new-checkbox li ul {
      display: none;
    }
    .new-checkbox li.has-checked  > ul {
      display: block;
    }

和我的 jquery

$(document).ready(function() {

  $('.new-checkbox li:has(ul)').addClass('parent');

  $(".new-checkbox li.hasUl > label:not(:input[type='checkbox'])").on("click",function(){
     $(this).addClass("additional");
  });
  $('.new-checkbox input[type=checkbox]:not(label)').on("change", function() {
    var checked = this.checked,
      $li = $(this).parent();
    $li.find('input[type=checkbox]').prop('checked', checked).parent().toggleClass('has-checked', checked);

    $li.parentsUntil('.new-checkbox', 'li').each(function() {
      var $checks = $(this).find('ul input[type=checkbox]');
      $(this).children('input[type=checkbox]').prop('checked', !$checks.filter(':not(:checked)').length);

      $(this).toggleClass('has-checked', $checks.is(':checked'));
    });
  });
});

最佳答案

无需 JavaScript:

.check-toggle input[type=checkbox] + label + div{
  display:none;
}
.check-toggle input[type=checkbox]:checked + label + div{
  display:block;
}
<div class="check-toggle">
  <input type="checkbox" id="my-id">
  <label for="my-id">Check me</label>
  <div>
    Some content here
  </div>
</div>

关于javascript - 我必须如何更改我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36011982/

相关文章:

javascript - 从外部站点收集图像

javascript - 我怎样才能访问 dojox-chart?

javascript - Google Chart IE9 问题(未定义)

javascript - 我找不到访问 dGrid 商店的简单方法

php - 自动完成数据分类

html - 使用 CSS 创建悬停下拉菜单

javascript - 百分比值的利润率高得离谱

javascript - 根据一天中的时间更改背景(使用 javascript)

javascript - 使用 Ajax Jquery 获取数据并将参数发送到 Controller

javascript - 将 .aspx 文件调用到另一个 .aspx 文件中