#javascript #jquery #css
#javascript #jquery #css
Вопрос:
Я уже получал помощь с двумя сценариями, и я действительно благодарен за это! Я надеюсь, что кто-нибудь сможет прийти на помощь еще раз.
Один скрипт позволяет мне показывать / скрывать дочерние элементы UL и снимать флажок с других родителей.
Второй сценарий был для кнопки флажка, когда метки не было.
Оба были решениями jquery. Проблема на данный момент заключается в том, что два сценария конфликтуют. Я создал codepen, чтобы показать проблему.
Важно отметить, я не могу изменить HTML напрямую, но у меня есть возможность использовать jquery на странице.
Итак, в настоящее время флажки сняты, вы можете показывать и скрывать дочерние элементы, выбрав родительскую категорию. Но второй скрипт, устанавливающий флажки, похоже, что-то переопределяет. С помощью первого скрипта показывать и скрывать. Это предназначено для отмены выбора всех дочерних элементов, если вы нажмете родительскую категорию или любую другую родительскую категорию.
Если вы отключите скрипт для кнопки флажка без метки, то функция показать скрыть будет работать так, как задумано. Но тогда я снова остаюсь с флажками.
Вот ссылка на codepen:
https://codepen.io/mjthehunter/pen/YgaOxr
<!-- Hide/Unhide Categories -->
$('.fes-category-checklist > li > label.selectit > input[name^="download_category"]').change(function() {
var categoryId = this.value;
var $checkbox = $(this);
$('.fes-category-checklist')
.find('li[id^="download_category"]')
.attr('data-open', function(index, value) {
return this.id.endsWith(categoryId) amp;amp; value === 'false';
});
$checkbox
.closest('ul')
.find('input[name^="download_category"]')
.not(this)
.prop('checked', false);
});
$(document).ready(function() {
$('ul.fes-category-checklist')
.find('> li[id^="download_category"]')
.attr('data-open', false)
.fadeIn();
});
<!-- checkbox button with no label -->
$(document).ready(function(){
$('.fes-category-checklist, .fes-category-checklist .children').addClass('nolist');
$('.selectit').addClass('checkbutton');
$('.checkbutton').click(function(){
if( $(this).children('input:checkbox').is(':checked') ) {
$(this).addClass('ischecked');
} else {
$(this).removeClass('ischecked');
}
});
});
Я действительно надеюсь, что кто-нибудь сможет помочь.
Спасибо!
Morten
Комментарии:
1. В чем ваш вопрос? У нас нет информации о том, что было сделано раньше или нет. Итак, можете ли вы сказать, с какой текущей проблемой вы столкнулись и чего вы ожидаете?
Ответ №1:
В вашем событии изменения для ваших флажков вы устанавливаете, чтобы все остальные флажки не проверялись с помощью этого кода:
$checkbox
.closest('ul')
.find('input[name^="download_category"]')
.not(this)
.prop('checked', false);
Но вы не удаляете ischecked
класс, который добавлен с помощью вашего скрипта «кнопка флажка без метки». Вам также придется удалить это …. вот так:
$checkbox
.closest('ul')
.find('input[name^="download_category"]')
.not(this)
.prop('checked', false)
.parent().removeClass('ischecked'); // <-- add this to remove isSelected class
Вот обновленный codepen
Комментарии:
1. Идеально! Большое вам спасибо