Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jQuery и аккордион 
:(
    Опции темы
finogeev
Дата 23.4.2009, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Собсвенно вопросик вот в чём. Хочу что при нажатии на "dt a" если оно закрыто - открывалось, а если открыто, закрывалось.
Сейчас отраюатывает закрытие и идет дальнейшее выполнение скрипта.
Как то можно остановить дальнейшее выполнение скрипта ... Или может просто коряво код написан


Код

    $(document).ready(function(){
        $("dd").hide();
        $("dt a").click(function(){
            
            if ($("dd:visible")) {        
                $(this).parent().next().slideUp("slow");
            }
            
            $("dd").slideUp();
            $(this).parent().next().slideToggle("slow");
            
            return false;
            
        });
    });

PM MAIL ICQ   Вверх
Aliance
Дата 23.4.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Остановить выполнение дальнейшее можно с помощью возврата, прерывания или продолжения - смотря на каком этапе выполнения находится скрипт (return, break, continue).

Ну а у тебя не совсем правильна задумка. Просомтри еще раз что делают эти две функции:
Код

$( elem ).toggle();
$( elem ).slideToggle();


PM MAIL WWW ICQ Skype   Вверх
finogeev
Дата 24.4.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Что то не пойму .. сделал вот так:

Код

    $(document).ready(function(){
        $("dd").hide();
        
        $("dt a").click(function(){
                                     
             if ($("dd:hidden")) {        
                
                $("dd").slideUp();
                $(this).parent().next().slideDown("slow");
                
                            } else if ($("dd:visible")) {
                                     
                $(this).parent().next().slideUp("slow");
            
                      }
               });                    
    });


Всервно выходит что когда хочу закрыть текущее окно которое  "visible", он открывает :(
PM MAIL ICQ   Вверх
Aliance
Дата 27.4.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Скинь html-код блоков, которые ты хочешь скрывать.
PM MAIL WWW ICQ Skype   Вверх
finogeev
Дата 27.4.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Вообще вот пример над которым я борюс http://kotlonadzor.ru/test_api3.php

Код

<dl>
    <dt><a href="test//">1</a></dt>
    <dd>
    <ul>
        <li><a href="test/">1-1</a></li>
        <li><a href="test/">1-2</a></li>
        <li><a href="test/">1-3</a></li>
    </ul>
    </dd>
    <dt><a href="test/">2</a></dt>
    <dd>
    <ul>
        <li><a href="test/">2-1</a></li>
        <li><a href="test/">2-2</a></li>
        <li><a href="test/">2-3</a></li>
        <li><a href="test/">2-4</a></li>
    </ul>
    </dd>
    <dt><a href="test/">3</a></dt>
    <dd>
    <ul>
        <li><a href="test/">3-1</a></li>
        <li><a href="test//">3-2</a></li>
        <li><a href="test/">3-3</a></li>
    </ul>
    </dd>
</dl>

PM MAIL ICQ   Вверх
Aliance
Дата 2.5.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Пример вроде работает как и должен. В чем проблема?
PM MAIL WWW ICQ Skype   Вверх
ksnk
Дата 2.5.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



finogeev,  Сейчас там такая проблема - если много раз нажать на ссылку 1 первый аккордеон начнет открываться закрываться ещё много-много раз...

Возможно, поможет функция stop







--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
finogeev
Дата 4.5.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Правильно, проблема в том, что если один раз нажимать на один и тот же пункт то он не закрывается , а постоянно открывается
PM MAIL ICQ   Вверх
ksnk
Дата 4.5.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



finogeev, Про функцию stop удалось чего-то узнать?

Вероятно, ее стоит использовать с параметрами stop(true,true), иначе придется перераскрывать аккордеоны заново.
Да и проверять поолезно - не в раскрытый ли уже аккордеон кликаем?



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Aliance
Дата 4.5.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



В аккардеоне таков принцип - что всегда должен быть открыт ровно 1 пункт. Если ты пытаешься какой-то закрыть, то как скрипт определит, какой нужно открыть вместо него?
PM MAIL WWW ICQ Skype   Вверх
ksnk
Дата 4.5.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



Aliance, Значит он из принципиальных соображений должен работать неправильно?  smile 

вот так уже значительно лучше
Код

$("dt a").click(function(){
    if ($("dd:hidden")) {        
        $("dd").stop(true,true).slideUp();
        $(this).parent().next().slideDown("slow");
    } else if ($("dd:visible")) {
        $(this).parent().next().stop(true,true).slideUp("slow");
    }
    return false; 
});




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Aliance
Дата 4.5.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Почему неправильно? Может быть у меня не правильное понимание этого скрипта (потому что сам им никогда не пользовался), но как мне кажется 1 пункт должен быть всегда открыт. Как в iPhone, я ведь так понимаю, что скрипт основан на нем.
PM MAIL WWW ICQ Skype   Вверх
ksnk
Дата 4.5.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



Aliance, Один пункт всегда открыт, но если на него-же кликнуть, его уже закрывать-открывать не нужно так?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
finogeev
Дата 5.5.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Ой что то запутался пока читал ... 

ksnk
Про stop, читал прочитал, но он не приминим в данном случае, т.к. он для остановки эфектов, а не для остановки выполнения скрипта. Вообще с ним ничего не получилось ....

Вообщем что я не пытаюсь пока всё на том же месте ... при закритие данный пункт всеравно открывается ... :(
Вообщем, пришлось оставить код корявым ... Не аккордеон, а простой Toggle

Код

$("dt a").click(function(){       
$(this).parent().next().slideToggle("slow");
return false; 
});



Это сообщение отредактировал(а) finogeev - 5.5.2009, 13:11
PM MAIL ICQ   Вверх
Aliance
Дата 5.5.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Цитата

Один пункт всегда открыт, но если на него-же кликнуть, его уже закрывать-открывать не нужно так? 

По идеи, если кликнуть на открытый блок, то он должен сперва закрыться, а потом тут же открыться. Но из-за скорости вполне возможно что вообще изменения не будет заметно, как если бы он не закрывался вовсе. Или я не прав?

Опять-таки, я не спорю, я скорее спрашиваю.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.