Показать сообщение отдельно
  #13 (permalink)  
Старый 22.01.2019, 20:38
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от гуня
задача сделать так чтобы не мигало
Пост №7
Вот упрощенно ваша структура
<div id="page">
    <form>
        <select></select>
    </form>
    <div class="row"></row>
</div>

Когда вы выбираете что-то в select, у вас происходит скачивание HTML-кода, который затем вставляется в элемент <div id="page">. Как видите, у вас происходит замена всего содержимого (включая форму с открытым <select>) на новое содержимое. (поэтому иногда подмигивает! у меня едва подмигивает 1 раз на 5 просмотров, это не так критично, в принципе здесь можно ничего не менять!)

Но всё-же вы можете не обновлять форму!
Тогда надо поменять структуру HTML на такую...
<div>
    <form>
        <select></select>
    </form>
    <div class="row" id="page"></row>
</div>
Обратите внимание, как я перенёс атрибут id! Тогда оно не мигает, поскольку не заменяется форма, но тогда нужно немного поправить ответ от сервера! (отрисовывать форму на сервере не надо, тогда!)

Сообщение от гуня
спасибо попробую
я еще пытался делать вызов
setinterval ({$('div.' + cssClass + ' .multiselect').parent().find('ul').show();}, 1);

но все равно мигание иногда проскакивает
UPD

Сообщение от гуня
не помогло
перенес id page но форма все равно сбрасывается
если что на тесте обновил
надо было сверху убрать id="page" и добавить вниз

а вы зачем-то и наверху оставили id="page" и вниз добавили id="page1"

у вас получилось так

<div id="page">
    <form>
        <select></select>
    </form>
    <div class="row" id="page1"></row>
</div>


а надо так
<div>
    <form>
        <select></select>
    </form>
    <div class="row" id="page"></row>
</div>


Читайте, что я пишу!!!

Сообщение от гуня
читал
я поменял в скрипте код обновления
new Pjax({
        elements: 'a[ajaxLink], li.page a, div.sorter a, form',
        selectors: ['#page1'],
        scrollTo: false,
        cacheBust: false
    });

UPD
А в тесте до сих пор показывает (в category.js строки 48-53)

new Pjax({
        elements: 'a[ajaxLink], li.page a, div.sorter a, form',
        selectors: ['#page'],
        scrollTo: false,
        cacheBust: false
    });


UPD
Теперь передвинулось на строки 65-70, но всё-равно тот же текст

UPD

Сообщение от гуня
сделал как описано в 7 посте
теперь page перенесено
не помогло
помогло!

Проще говоря, раскомментируйте 49 строчку в category.js

у вас в category.js строки 28-53 выглядит так
$(document).on('change', '#goods-filter :input, #goods-filter [type=hidden]', function() {



        /*interval = setInterval(function () {
            //$('div.' + cssClass + ' .multiselect').parent().find('ul').show();
            //cssClass = '';

            if (cssClass.length > 0) {
                console.log('setInterval');
                $('div.' + cssClass + ' .multiselect').parent().find('ul').show();
            }

            if (cssClass.length == 0) {
                clearInterval(interval);
            }
        }, 1);*/

        $('#goods-filter :submit').click();

        if (cssClass.length > 0) {
            //$('div.' + cssClass + ' .multiselect').parent().find('ul').show();
        }


    });


а надо так
$(document).on('change', '#goods-filter :input, #goods-filter [type=hidden]', function() {



        /*interval = setInterval(function () {
            //$('div.' + cssClass + ' .multiselect').parent().find('ul').show();
            //cssClass = '';

            if (cssClass.length > 0) {
                console.log('setInterval');
                $('div.' + cssClass + ' .multiselect').parent().find('ul').show();
            }

            if (cssClass.length == 0) {
                clearInterval(interval);
            }
        }, 1);*/

        $('#goods-filter :submit').click();

        if (cssClass.length > 0) {
*!*
            $('div.' + cssClass + ' .multiselect').parent().find('ul').show();
*/!*
        }


    });
или лучше так (если закомментированное не нужно!) а надо так
$(document).on('change', '#goods-filter :input, #goods-filter [type=hidden]', function() {
        $('#goods-filter :submit').click();

        if (cssClass.length > 0) {
            $('div.' + cssClass + ' .multiselect').parent().find('ul').show();
        }
    });


UPD

Сообщение от гуня
при первой загрузке чекбоксы схлопываются
я не понял, что это значит, но если раскомментировать 49 строчку то всё работает без мигания и сворачивания

Сообщение от гуня
надо загрузить новую вкладку без параметров и выбрать чекбокс
Ах, да! Заметил! То, что у вас в category.js на 55-57 строчках перенесите на 27

$(document).on('change', ':checkbox', function() {
        cssClass = $(this).closest('div.col-xs-3').data('css');
    });

то, что у вас на 55-57 строчках перенесите на 27 (у вас она до сих не перенесена)

Последний раз редактировалось Malleys, 22.01.2019 в 21:16.
Ответить с цитированием