Как заставить jQuery код срабатывать каждый раз для сайта без перезагрузки?

303
21 октября 2017, 17:57

Есть jQuery код,

function click() {
    $('.select_list_current').on('click', function(){
        // alert(1);
        $(this).parent('.select_list_wrapper').toggleClass('open');
        $(this).parent().find('.select_list').slideDown("slow");
    });
    $(document).on('click',function (event) {
        if ($(event.target).closest('.select_list_wrapper').length == 0 && $(event.target).attr('id') != 'select_list_current') {
            $('.select_list_wrapper.open').toggleClass('open');
            $(this).parent().find('.select_list').hide("slow");
        }
    });

    $('.select_list_radio').on('click', function(){
        var current = $(this).find('label span').text();
        $(this).parents('.select_list_wrapper').find('.select_list_current .select_list_current_item').text(current);
        $(this).parents('.select_list_wrapper').removeClass('open');
        $(this).parents('.select_list_wrapper').find('.select_list').css('display', 'block');
    });
}

который навешивает событие на следующую верстку

<div class="selected_relative">
                    <div class="select_list_wrapper ">
                        <div class="select_list_current">
                            <span class="label">Сортировать:</span>
                            <span class="select_list_current_item">По популярности</span>
                        </div>
                        <div class="select_list">
                            <div class="select_list_radio"><input type="radio" id="by_popular" name="sort_list" checked><label for="by_popular"><span>По популярности</span> </label></div>
                            <div class="select_list_radio"><input type="radio" id="by_price" name="sort_list"><label for="by_price"><span>По цене</span> </label></div>
                            <div class="select_list_radio"><input type="radio" id="by_date" name="sort_list"><label for="by_date"><span>По новизне</span> </label></div>
                        </div>
                    </div>
                </div>

Данные селекты встречаются на каждой страницы сайта.

Для того, чтобы функция click () сработала я ее вызываю при загрузке страницы

$(window).load(function() {
 click();
});

И в своем компоненте

updated() {
            this.$nextTick(function () {
                setTimeout(() => {
                    click();
                }, 1000)
            })
        },

Но срабатывает это в 100% только когда я страницу перезагружаю. При обычном "гулянии" по маршрутам селекты срабатывают через раз.

Answer 1

Я лично пользуюсь конструкцией вида:

$(function() {
    $(document).on('click', '.popup-link', function(e) {
        ... код ...
    });
});

Но так делать не очень хорошо.

READ ALSO
Не отображаются шрифты

Не отображаются шрифты

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

274
Как убрать поле выберите файл?

Как убрать поле выберите файл?

Подскажите пожалуйста, как убрать(спрятать) кнопку "Выберите файл"?

394
формирования отчетов php [требует правки]

формирования отчетов php [требует правки]

Есть поисковик по базе данных в процессе выполнения поиска происходит выдача результата после чего нужно создать кнопку например "создать...

250
Как при выборе чекбокса у родительской ссылки менять надпись

Как при выборе чекбокса у родительской ссылки менять надпись

Есть список с чекбоксамиКак мне менять текст в ссылке, при активации этого чекбокса, на текст с кол-вом активных чекбоксов?

354