Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Условие jQuery (https://javascript.ru/forum/jquery/57057-uslovie-jquery.html)

Flector 17.07.2015 11:18

Условие jQuery
 
есть плагин для WordPress:
https://wordpress.org/plugins/bbspoiler/

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

пример такого поведения можно посмотреть тут:
http://www.testwp.ru/bbspoiler/

я с js-скриптами очень на Вы и сам не могу правильно составить условие. может кто помочь?

рони 17.07.2015 11:46

Цитата:

Сообщение от Flector
это я реализовал.

указали бы или показали бы где?

рони 17.07.2015 11:54

Flector,
отмените всплытие клика
jQuery(".sp-head").on('click', function(event){
 *!*      
 event.preventDefault();
*/!*
        $this = jQuery(this);
        if($this.hasClass("unfolded")) {
            $this.removeClass("unfolded");
            $this.next().slideUp("fast");
            $this.next().addClass("folded");
            $this.prop('title', title.unfolded);
        } else {
            $this.addClass("unfolded");
            $this.next().slideDown("fast");
            $this.next().removeClass("folded");
        $this.prop('title', title.folded);
        }
    });

Flector 17.07.2015 22:23

Цитата:

Сообщение от рони (Сообщение 380149)
Flector,
отмените всплытие клика

что-то не получается. каким в итоге должен быть код?
сейчас он такой:
Код:

jQuery(function(){
    jQuery(".sp-body.folded").hide();

    jQuery(".sp-head").on('click', function(event){
    $this = jQuery(".sp-head");
    if($this.not(this).hasClass("unfolded")) {
        $this.removeClass("unfolded");
        $this.next().slideUp("fast");
        $this.next().addClass("folded");
        $this.prop('title', title.unfolded);
    }
    });

    jQuery(".sp-head").on('click', function(event){
        $this = jQuery(this);
        if($this.hasClass("unfolded")) {
            $this.removeClass("unfolded");
            $this.next().slideUp("fast");
            $this.next().addClass("folded");
            $this.prop('title', title.unfolded);
        } else {
            $this.addClass("unfolded");
            $this.next().slideDown("fast");
            $this.next().removeClass("folded");
        $this.prop('title', title.folded);
        }
    });

    jQuery(".spdiv").on('click', function(event){
    $this = jQuery(this).closest("div.sp-body").prev();
        if($this.hasClass("unfolded")) {
            $this.removeClass("unfolded");
            $this.next().slideUp("fast");
            $this.next().addClass("folded");
            $this.prop('title', title.unfolded);
        }
    });

});


jasper-blondin 17.07.2015 22:38

Вам даже строчку подсветили. Ну как так...

event.preventDefault()

nerv_ 17.07.2015 22:48

Цитата:

Сообщение от рони
отмените всплытие клика

всплытие отменяет
event.stopPropagation();

https://learn.javascript.ru/event-bubbling

Flector 18.07.2015 00:37

не знаю, что такое всплытие клика, но боюсь это не поможет.
вернее может поможет, но я не знаю как написать условие, чтобы не сворачивался родительский спойлер при кликах на дочерние спойлеры. проблема именно в условии - я уже и parent и children и прочее пробовал, но все не выходит. максимум чего смог добиться, это чтобы сворачивания\разворачиван� �я дочерних спойлеров не сворачивали родительский - но тогда и внутри родительского спойлера дочерние не сворачиваются.

короче, голова уже пухнет.


Часовой пояс GMT +3, время: 12:37.