jquery - Stop Accordion Toggle when Checkbox is checked -
so have little idea of jquery. trying make piece of code working long now. don't understand problem is.
following html code:
<ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">administration</a></div> <ul class="accordion"> <li> <div><input type="checkbox" /><a href="#">president</a></div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">manager 1</a></div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">assistant manager 1</a></div></li> <li> <div> <input type="checkbox" /><a href="#">assistant manager 2</a></div></li> <li> <div> <input type="checkbox" /><a href="#">assistant manager 3</a></div></li> </ul> </li> <li> <div> <input type="checkbox" />manager 2</div></li> <li> <div> <input type="checkbox" />manager 3</div></li> </ul> </li> </ul> </li>
following jquerycode:
$(".accordion > li > div").click(function () { $('.active').not(this).removeclass('active').next().slideup(300); $(this).toggleclass('active'); if (false == $(this).next().is(':visible')) { $('.accordion > ul').slideup(300); } $(this).next().slidetoggle(300); }); $('li :checkbox').on('click', function () { var $chk = $(this), $li = $chk.closest('li'), $ul, $parent; if ($li.has('ul')) { $li.find(':checkbox').not(this).prop('checked', this.checked); } { $ul = $li.parent(); $parent = $ul.siblings(':checkbox'); if ($chk.is(':checked')) { $parent.prop('checked', $ul.has(':checkbox:not(:checked)').length == 0) } else { $parent.prop('checked', false) } $chk = $parent; $li = $chk.closest('li'); } while ($ul.is(':not(.someclass)')); });
i got example fiddle clicking parent checkbox check children boxes. wanted exact same thing in accordion. accordion toggling fine,but when click parent checkbox,the entire child-accordion collapsing. want when accordion title clicked,the accordion should collapse. if checkbox checked accordion should still stay open,but child elements should checked.
any appreciated. thank you!
you can check whether click happened in input element, if don't anything
$(".accordion > li > div").click(function(e) { if ($(e.target).is('input')) { //if clicked on input element don't return } $('.active').not(this).removeclass('active').next().slideup(300); $(this).toggleclass('active'); if (false == $(this).next().is(':visible')) { $('.accordion > ul').slideup(300); } $(this).next().slidetoggle(300); }); $('li :checkbox').on('click', function() { var $chk = $(this), $li = $chk.closest('li'), $ul, $parent; if ($li.has('ul')) { $li.find(':checkbox').not(this).prop('checked', this.checked); } { $ul = $li.parent(); $parent = $ul.siblings(':checkbox'); if ($chk.is(':checked')) { $parent.prop('checked', $ul.has(':checkbox:not(:checked)').length == 0) } else { $parent.prop('checked', false) } $chk = $parent; $li = $chk.closest('li'); } while ($ul.is(':not(.someclass)')); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">administration</a> </div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">president</a> </div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">manager 1</a> </div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">assistant manager 1</a> </div> </li> <li> <div> <input type="checkbox" /><a href="#">assistant manager 2</a> </div> </li> <li> <div> <input type="checkbox" /><a href="#">assistant manager 3</a> </div> </li> </ul> </li> <li> <div> <input type="checkbox" />manager 2</div> </li> <li> <div> <input type="checkbox" />manager 3</div> </li> </ul> </li> </ul> </li> <li> <div> <input type="checkbox" /><a href="#">administration</a> </div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">president</a> </div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">manager 1</a> </div> <ul class="accordion"> <li> <div> <input type="checkbox" /><a href="#">assistant manager 1</a> </div> </li> <li> <div> <input type="checkbox" /><a href="#">assistant manager 2</a> </div> </li> <li> <div> <input type="checkbox" /><a href="#">assistant manager 3</a> </div> </li> </ul> </li> <li> <div> <input type="checkbox" />manager 2</div> </li> <li> <div> <input type="checkbox" />manager 3</div> </li> </ul> </li> </ul> </li> </ul>
Comments
Post a Comment