Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нуждаюсь в помощи (https://javascript.ru/forum/misc/74242-nuzhdayus-v-pomoshhi.html)

wolfio 14.07.2018 17:54

Добрый день.
Рони, хотел бы попросить вас о помощи вновь.
Я в ходе тестирования кода, с которым вы мне помогли, понял, что не учел один нюанс: когда закрывается спойлер, то при повторном и последующем открытии я ожидал что будет формироваться новый запрос к серверу, для получения новых данных.

Вы не могли бы помочь с этим?
задача вроде бы простая, но я попробовал сам - поставил дебаг alert("sp_text:" + spoiler.text);
что за текст там записан? у меня такого кода нет.
Можете разъяснить в чем фокус тут с str переменной?
и что обозначает это логическое выражение "if(text) " ? проверка на пустоту?

Вот код, который я сделал:

$(function () {
    $(".b_ad").on("click", ".b_button_responds", function (event) {
        event.preventDefault();
        var parent = event.delegateTarget,
            id = parent.id,
            spoiler = $('.spoiler-block', parent),
            text = spoiler.text(),
            str = "загрузка...";

        if (text) {
            spoiler.slideToggle(300);
            spoiler.text("");
        }
        else if (text != str) {
            spoiler.text(str);
            $.post("RespondsList"
                , {AdId: id}
                , function (data) {
                    spoiler.html(data);
                })
        }
    })
});

Собственно я лишь добавил spoiler.text("");, для очистки, чтобы далее формировался запрос к серверу. Проблема в том, что после первого сворачивания, послеующие развертывания спойлера работают с третьего раза. Почему так?

и еще я бы хотел спросить, на далекое будущее - если я вдруг захочу сделать анимацию загрузки (крутящийся кружочек или еще что), правильно ли я понимаю, что вместо строки spoiler.text(str); мне следует вызывать эту самую анимацию?

рони 14.07.2018 18:58

wolfio,
$(function() {
    $(".b_ad").on("click", ".b_button_responds", function(event) {
        event.preventDefault();
        var parent = event.delegateTarget,
            id = parent.id,
            spoiler = $(".spoiler-block", parent),
            html = spoiler.html(),
            str = "загрузка...<img src='http://pampinta.com/imgs/img_loader.gif' alt=''>";
        if (html == str) return;
        if (html.trim()) spoiler.slideUp(300, function() {
            spoiler.html("")
        });
        else {
            spoiler.html(str).slideDown();
            $.post("RespondsList", {
                AdId: id
            }, function(data) {
                spoiler.html(data)
            })
        }
    })
});

wolfio 15.07.2018 14:20

Рони, я дико извиняюсь, за такое множество вопросов, но как пофиксить вот этот сдвиг блока при обратном сворачивании спойлера?
Я не знаю как это объяснить этот сдвиг, поэтому гифку сделал.


Под сдвигом я имею ввиду то, что при сворачивании обратно, таблица сдвигается вправа (по вертикали за слово "отклики", а затем уже сворачивается) и разворачивается соответственно так же.
Как понять из-за чего это?

Стили в коде не меняются вроде бы

рони 15.07.2018 15:13

wolfio,
а если slideUp и slideDown заменить на hide и show;
или добавить css в строки 12 и 14

slideDown().css({position: "relative"});

или так
<style type="text/css">
  .b_ad_left_side{
       position: relative;
  }
  </style>


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


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