Можно ли экспортировать значение переменной из одного JavaScript в другой? - PullRequest
3 голосов
/ 20 августа 2009

Я создал веб-страницу, используя jquery и php, где все файлы используются в модульном стиле. Теперь у меня есть два файла JavaScript, которые должны общаться друг с другом. Один скрипт генерирует переменную ( id_menu_bar ), которая содержит число. Я хочу, чтобы эта переменная переносилась во второй JavaScript и использовалась там.

Как мне это сделать?

Здесь сценарий

menu_bar.js

$(document).ready(function() {

function wrapper_action(id_menu_bar) {
  $(".wrapper").animate({height: "0px"});
  $("#changer p").click(function() {
    $(".wrapper").animate({height: "300px"});
  });
}

  $("#select_place li").live("click", function() {
  var wrapper_id = $(".wrapper").attr("id");
  var id_place = this.id;

  if (wrapper_id != "place")
    {
    $("#select_level li").remove();
      $("#select_building").load("menu_bar/menu_bar_building.php?placeitem="+id_place, function() {
        $("#select_building li").click(function() {
        var id_building = this.id;

          if (wrapper_id != "building")
            {
            $("#select_level").load("menu_bar/menu_bar_level.php?buildingitem="+id_building, function() {
              $("#select_level li").click(function() {
                var id_level = this.id;
                wrapper_action(id_level);
              });
            });

            }
          else if (wrapper_id == "building")
            {wrapper_action(id_building);}
        });
      });

      }
   else if (wrapper_id == "place")
    {wrapper_action(id_place);}
   });

}); 

Ответы [ 2 ]

6 голосов
/ 20 августа 2009

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

jQuery's $.data() также подходит для хранения данных по элементам и означает, что вам не нужно использовать глобальную переменную и загрязнять глобальное пространство имен.

EDIT:

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

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

За пределами функции, объявляющей переменную типа

var myVariable;

или

myVariable;

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

function firstFunction() {
    // Local scope i.e. scoped to firstFunction
    var localVariable; 

    // Global scope i.e. available to all other JavaScript code running
    // in the page
    globalVariable = "I'm not really hiding";
}

function secondFunction() {
    // I can access globalVariable here but only after
    // firstFunction has been executed
    alert(globalVariable); // alerts I'm not really hiding
}

Разница в этом сценарии заключается в том, что предупреждение не будет работать и не будет отображать значение для globalVariable при выполнении secondFunction() до тех пор, пока не будет выполнено firstFunction(), поскольку именно здесь объявлена ​​переменная. Если бы переменная была объявлена ​​вне какой-либо функции, предупреждение было бы успешным и показало бы значение globalVariable

Использование jQuery.data ()

Используя эту команду, вы можете сохранить данные в объекте кэша для элемента. Я бы порекомендовал посмотреть на источник, чтобы увидеть, как это достигнуто, но это довольно аккуратно. Рассмотрим

  function firstFunction() {
      $.data(document,"myVariable","I'm not really hiding"); 
      globalVariable = "I'm not hiding";
  }

  function secondFunction() {
      // alerts "I'm not really hiding" but only if firstFunction is executed before
      // secondFunction
      alert($.data(document, "myVariable"));

      // alerts "I'm not hiding" but only if firstFunction is executed before
      // secondFunction
      alert(globalVariable);
  }

в этом сценарии строковое значение "I'm not really hiding" сохраняется для объекта документа с использованием строки ключа myVariable в firstFunction. Это значение затем может быть получено из объекта кэша в любом месте скрипта. Попытка чтения значения из объекта кэша без предварительной установки приведет к undefined.

Взгляните на это Рабочая демоверсия для получения более подробной информации.

По причинам, не позволяющим использовать глобальные переменные, ознакомьтесь с статьей .

0 голосов
/ 20 августа 2009

Должен ли он иметь переменную JavaScript?

Можете ли вы сохранить информацию, используя функцию .data() для соответствующего элемента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...