Глобальные переменные jQuery

#jquery #variables #global-variables

#jquery #переменные #глобальные переменные

Вопрос:

Я пытаюсь «глобализировать» свои переменные, чтобы использовать их в нескольких функциях, но без результата. Где я не прав? большое вам спасибо!

Вот код:

 var my_sidebar_clicked = $('#dash #sidebar ul#main_menu li');
var my_dash_main_content = $('#dash > #main_content');


function mainmenu_selection() {

            //var my_sidebar_clicked = $('#dash #sidebar ul#main_menu li');
            //var my_dash_main_content = $('#dash #main_content');

            my_sidebar_clicked.children().click(function() {
                var el = $(this);
                var mylink = el.attr('href');

                $('#dash #sidebar ul#main_menu li a').removeClass('current');
                $(this).addClass('current');

                //$('#dash #main_content').load("ajax/"   mylink);

                my_dash_main_content.html('<img class="loader_img" src="common/img/ajax-loader.gif" />');
                my_dash_main_content   $(".loader_img").fadeIn(200);
                my_dash_main_content.load("ajax/"   mylink, function(response, status, xhr) {
                        if (status == "error") {
                                var msg = "Oops... sembra esserci un problema, ti preghiamo di riprovare ";
                                my_dash_main_content.html("<h4 class='error_msg'>"   msg   "</h4>"/*   xhr.status   " "   xhr.statusText*/);
                        }
                });

                return false;
            });
}
  

Комментарии:

1. можем ли мы увидеть html? также вы уверены, что селекторы указаны правильно?

2. Любая из выбранных вами вещей обновляется динамически? Если это так, то предыдущие значения селектора могут быть устаревшими. Также эти селекторы выглядят излишне сложными, предполагая, что у вас нет ненадлежащим образом повторяющихся идентификаторов, 1-й эквивалентен #main_menu li , а 2-й эквивалентен #main_content

Ответ №1:

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

Попробуйте это вместо первых двух строк:

 $(function() {
    window.my_sidebar_clicked = $('#dash #sidebar ul#main_menu li');
    window.my_dash_main_content = $('#dash > #main_content');
});
  

Комментарии:

1. Я бы посоветовал не загрязнять глобальную область видимости, а просто объявлять переменные (и все остальное) внутри обратного вызова document ready.

2. @MattBall: Если я правильно прочитал вопрос, операционной системе необходимо, чтобы эти переменные были видны из нескольких файлов JS. Поэтому поместить их внутрь функции было бы нецелесообразно.

3. Несколько функций != несколько файлов.

4. @MattBall: По какой-то причине я читаю «multile» не как multi p файл, а как multi fi файл… вы все поняли правильно.