如果没有孩子如何不切换


嗨,我

开发复选框,我有一些问题。如果我的 li 父母没有 ul 孩子,它就不会切换。我说的是红色箭头,它是li元素的左边。

多亏了 @Arun P Johny,我得到了解决问题,我还要做的一件事是当单击标签复选框时,我

只选中了 ul 孩子

查看我的代码代码笔

.html

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>No Title</title>
</head>
<body> 
    <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: "0a0";
  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;
}
.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.downCheck: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 ul li:before {
  content:"";
  width:16px;
  height:16px;
  display:block;
  float:left;
  background:url("https://cdn3.iconfinder.com/data/icons/google-material-design-icons/48/ic_keyboard_arrow_right_48px-16.png") no-repeat left center;
      margin-top: 2px;
}
 li.downCheck:before{
   content:"";
  width:16px;
  height:16px;
  display:block;
  float:left;
  background:url("https://cdn3.iconfinder.com/data/icons/google-material-design-icons/48/ic_keyboard_arrow_down_48px-16.png") no-repeat left center !important;
    margin-top: 2px;
}
*/
.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;
}

j查询代码

$(document).ready(function() {

  $('.new-checkbox input[type=checkbox]').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'));
    });
  });

    $('.new-checkbox li.hasUl input[type="checkbox"]').on("click",function(e) {
         $(this).parent("li").stop().toggleClass("downCheck"); 
      });
    $(".new-checkbox ul li > * li:has(ul)").addClass("downCheck");

});
可以使用

has-checked类来设置元素样式,不需要有新类

$(document).ready(function() {
  $('.new-checkbox li:has(ul)').addClass('parent');
  $('.new-checkbox input[type=checkbox]').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'));
    });
  });
});
.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: "0a0";
  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;
}
.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 ul li:before {
  content:"";
  width:16px;
  height:16px;
  display:block;
  float:left;
  background:url("https://cdn3.iconfinder.com/data/icons/google-material-design-icons/48/ic_keyboard_arrow_right_48px-16.png") no-repeat left center;
      margin-top: 2px;
}
 li.downCheck:before{
   content:"";
  width:16px;
  height:16px;
  display:block;
  float:left;
  background:url("https://cdn3.iconfinder.com/data/icons/google-material-design-icons/48/ic_keyboard_arrow_down_48px-16.png") no-repeat left center !important;
    margin-top: 2px;
}
*/
.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;
}
<script type="text/javascript" src="https://cdn.anitur.com.tr/js/jquery-1.8.2.min.js"></script>
<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-->

替换代码

$('.new-checkbox li.hasUl input[type="checkbox"]').on("click",function(e) {
     $(this).parent("li:has(ul)").stop().toggleClass("downCheck"); 
  });

$('.new-checkbox li.hasUl input[type="checkbox"]').on("click",function(e) {
     $(this).parent("li").stop().toggleClass("downCheck"); 
  });  

代码笔演示

最新更新