Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.02.2016, 18:04
Аспирант
Отправить личное сообщение для Pobedill Посмотреть профиль Найти все сообщения от Pobedill
 
Регистрация: 10.02.2016
Сообщений: 46

Проверка родительских чекбоксов и их раскрытие
Нужно чтобы ссылка-якорь открывала содержимое аккордеона в аккордеоне. В данном примере на #toggle-1.1. Можно ли как-то делать проверку родительских чекбоксов и открывать их? Скрипт приведенный ниже открывает по якорю только первый аккордеон. Очень нужно для входящих ссылок и продвижения ссылаться конкретно на пункт аккордеона.

<ul class="accordion">
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-1">Заголовок 1</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-1" />
        <div class="accordion_target">
<ul class="accordion">
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-1.1">Заголовок 1.1</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-1.1" />
        <div class="accordion_target">
            <p>
              Текст
            </p>
        </div>
    </li>
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-1.2">Заголовок 1.2</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-1.2" />
        <div class="accordion_target">
            <p>
               Текст
            </p>
        </div>
    </li>
</ul>
</div>
</li>
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-2">Заголовок 2</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-2" />
        <div class="accordion_target">
            <p>
               Текст
            </p>
        </div>
    </li>
</ul>



<script>
    
window.addEventListener('load', function() {
 
location.hash && (document.querySelector(location.hash).checked = true)
        
});
  
</script>

Последний раз редактировалось Pobedill, 13.02.2016 в 22:28.
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2016, 21:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Pobedill,
прежде чем опубликовать html, проверяйте структуру тегов
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2016, 22:28
Аспирант
Отправить личное сообщение для Pobedill Посмотреть профиль Найти все сообщения от Pobedill
 
Регистрация: 10.02.2016
Сообщений: 46

Извините. Исправил.
Ответить с цитированием
  #4 (permalink)  
Старый 14.02.2016, 00:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Pobedill,
на всякий случай точка недопустимый символ в id ... и строка 50 только для теста
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
 </head>

<body>
 <ul class="accordion">
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-1">Заголовок 1</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-1" />
        <div class="accordion_target">
<ul class="accordion">
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-1.1">Заголовок 1.1</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-1.1" />
        <div class="accordion_target">
            <p>
              Текст
            </p>
        </div>
    </li>
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-1.2">Заголовок 1.2</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-1.2" />
        <div class="accordion_target">
            <p>
               Текст
            </p>
        </div>
    </li>
</ul>
</div>
</li>
    <li class="accordion_item">
        <label class="accordion_trigger" for="toggle-2">Заголовок 2</label>
        <input type="checkbox" class="accordion_toggle" id="toggle-2" />
        <div class="accordion_target">
            <p>
               Текст
            </p>
        </div>
    </li>
</ul>
<script>
window.addEventListener("load", function() {
    var a = "#toggle-1.1"
    //var a = location.hash;
    a && (a = a.slice(1).split(".").reduce(function(b, a) {
        b = b ? b + "." + a : a;
        document.querySelector('[id="' + b + '"]').checked = !0;
        return b
    }, ""))
});
</script>

</body>

</html>

Последний раз редактировалось рони, 14.02.2016 в 00:59.
Ответить с цитированием
  #5 (permalink)  
Старый 14.02.2016, 05:52
Аспирант
Отправить личное сообщение для Pobedill Посмотреть профиль Найти все сообщения от Pobedill
 
Регистрация: 10.02.2016
Сообщений: 46

рони,
Для #toggle-1.1 работает даже несмотря на точки в id. А если таких ссылок очень много (274) ?
Ответить с цитированием
  #6 (permalink)  
Старый 14.02.2016, 09:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Pobedill,
скрипт работает, несмотря на не корректный синтаксис, чего более?
Ответить с цитированием
  #7 (permalink)  
Старый 14.02.2016, 12:54
Аспирант
Отправить личное сообщение для Pobedill Посмотреть профиль Найти все сообщения от Pobedill
 
Регистрация: 10.02.2016
Сообщений: 46

Дело в том, что скрипт раскрывает сразу пункт. А хотелось бы, чтобы по ссылке "URL#toggle-1.1". У меня прайс лист на сайте сделан аккордеоном, в нем 274 позиции, и я хочу бросать ссылки на одном форуме, чтоб они сразу вели на нужную позицию прайса. Скрипт с первого сообщения работает, но только для первого аккордеона (разделов прайса).
Ответить с цитированием
  #8 (permalink)  
Старый 14.02.2016, 13:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Pobedill,
не понимаю.
Ответить с цитированием
  #9 (permalink)  
Старый 14.02.2016, 14:46
Аспирант
Отправить личное сообщение для Pobedill Посмотреть профиль Найти все сообщения от Pobedill
 
Регистрация: 10.02.2016
Сообщений: 46

Лучше посмотреть

Хочу чтобы переходя с любого сайта на мой сайт по ссылке-якорю, можно было перейти на конкретный пункт аккордеона.

Например с такой ссылки <a href="http://mysite.com/price#toggle-6.2.30">Облицовка стен керамической плиткой</a>

Находится эта вкладка в Отделочные работы=>Полы=>Облицовка стен керамической плиткой. То есть три аккордеона в одном.

Последний раз редактировалось Pobedill, 20.05.2016 в 17:01.
Ответить с цитированием
  #10 (permalink)  
Старый 14.02.2016, 15:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Pobedill,
да хоть 10 вложений, скрипт отработает как надо.
2 скрипта убрать снизу что ставили ранее
заменить на это
<script>
   window.addEventListener("DOMContentLoaded", function() {
    var a = location.hash;
    a && (a = a.slice(1).split(".").reduce(function(b, a) {
        b = b ? b + "." + a : a;
        document.querySelector('[id="' + b + '"]').checked = !0;
        var c = document.querySelector('[id="' + b + '"]').previousElementSibling;
        c && c.scrollIntoView();
        return b
    }, ""))
});
</script>

в строке 36 нафига круглые скобки ? убрать ... научится пользоваться консолью и править ошибки ... без них и в первой редакции скрипт из 4 поста отработал бы свою функцию ... эх....

Последний раз редактировалось рони, 14.02.2016 в 15:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать значения чекбоксов sergylt Общие вопросы Javascript 12 08.02.2016 00:34
проверка формы не работает в ie begelme Javascript под браузер 6 13.08.2013 01:00
Проверка chekbox масива и сложения их значений ss18EXEL Общие вопросы Javascript 12 19.12.2012 10:03
Проверка полей отправляемой формы. denisOgr jQuery 6 18.10.2010 19:40
jquery validator и массивы чекбоксов ekkl jQuery 1 16.10.2009 16:26