2015-02-10 4 views
0

У меня есть список флажков, которые я хочу, чтобы их содержимое переключалось при проверке. Я написал это с помощью jQuery, но мне хотелось бы как-то оптимизировать мой код таким образом, что мне не нужно писать функцию для каждого флажка.Множество флажков с помощью 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>

ответ

2

Я хотел бы использовать классы и доступ ul «S с помощью next()

$(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>

+0

Спасибо за ваш ответ. У меня есть другой вопрос: что, если «ul» не является следующим ближайшим элементом после «ввода»? –

+0

Если он находится в одном элементе, вы можете использовать '$ (this) .parent(). Find ('ul') ...' см. Обновленный ответ –

1

Используйте класс:

<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")); 
}); 
Смежные вопросы