多个复选框使用jquery进行切换

Multiple checkboxes toggle using jquery

本文关键字:jquery 复选框      更新时间:2023-09-26

我有一个复选框列表,我希望在选中时切换它们的内容。我使用jQuery编写了它,但我希望以某种方式优化我的代码,这样我就不必为每个复选框编写函数。

$(document).ready(function() {
  $("#purpose-1").click(function() {
    $("#purpose-detail-1").toggle(this.checked);
  }).triggerHandler('click');
  $("#purpose-2").click(function() {
    $("#purpose-detail-2").toggle(this.checked);
  }).triggerHandler('click');
  $("#purpose-3").click(function() {
    $("#purpose-detail-3").toggle(this.checked);
  }).triggerHandler('click');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li>
    <input type="checkbox" id="purpose-1">Exhibition
    <ul id="purpose-detail-1">
      <li>
        <div>Title:</div>
        <div>
          <input type="text">
        </div>
      </li>
      <li>
        <div>Opening Date:</div>
        <div>
          <input type="text">
        </div>
      </li>
    </ul>
  </li>
  <li>
    <input type="checkbox" id="purpose-2">Publication
    <ul id="purpose-detail-2">
      <li>
        <div>Title:</div>
        <div>
          <input type="text">
        </div>
      </li>
    </ul>
  </li>
  <li>
    <input type="checkbox" id="purpose-3">Event
    <ul id="purpose-detail-3">
      <li>
        <div>Title:</div>
        <div>
          <input type="text">
        </div>
      </li>
      <li>
        <div>Event Date:</div>
        <div>
          <input type="text">
        </div>
      </li>
      <li>
        <div>Event Time:</div>
        <div>
          <input type="text">
        </div>
      </li>
    </ul>
  </li>
</ul>

我会使用类,并使用next()访问ul

$(document).ready(function() {
  $(".my-ul").hide();
  $(".my-checkbox").click(function() {
    // in case the 'ul' is next to the checkbox:
    // $(this).next('ul').slideToggle(this.checked);
    // in case the 'ul' is in the same element but not next to the checkox:
    $(this).parents('li').find('ul').slideToggle(this.checked);
    // or maybe even better:
    // $(this).closest('li').find('ul').slideToggle(this.checked);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li>
    <p> <input type="checkbox" class="my-checkbox"><strong>Exhibition</strong> </p> <ul class="my-ul">
      <li>
        <div>Title:</div>
        <div>
          <input type="text">
        </div>
      </li>
      <li>
        <div>Opening Date:</div>
        <div>
          <input type="text">
        </div>
      </li>
    </ul>
  </li>
  <li>
    <input class="my-checkbox" type="checkbox" id="purpose-2">Publication
    <ul class="my-ul" id="purpose-detail-2">
      <li>
        <div>Title:</div>
        <div>
          <input type="text">
        </div>
      </li>
    </ul>
  </li>
  <li>
    <input class="my-checkbox" class="my-checkbox" type="checkbox" id="purpose-3">Event
    <ul class="my-ul" id="purpose-detail-3">
      <li>
        <div>Title:</div>
        <div>
          <input type="text">
        </div>
      </li>
      <li>
        <div>Event Date:</div>
        <div>
          <input type="text">
        </div>
      </li>
      <li>
        <div>Event Time:</div>
        <div>
          <input type="text">
        </div>
      </li>
    </ul>
  </li>
</ul>

使用一个类:

<input type="checkbox" class="purpose-checkbox" id="purpose-1">Exhibition
<ul class="purpose-detail" id="purpose-detail-1">
    ...
</ul>

然后在jQuery中:

$(".purpose").click(function() { // We choose elements with purpose class
    var $this = $(this); // The purpose checkbox clicked
    var purpose_detail = $(".purpose-detail", $this ); // Element with purpose-detail class inside the clicked checkbox
    purpose_detail.toggle( $this.prop("checked") );
});