доступ к переменной за пределами $ (document) .ready () & jquery - PullRequest
10 голосов
/ 13 августа 2011

, поэтому у меня есть файл .js, который включен в мой html

Если я помещу это в мой файл .js,

$(document).ready(function(){    
      var siteRoot = $('.site-root').val();
      alert(siteRoot);
});

код будет предупреждать значение правильно, ноесли я сделаю это:

var siteRoot = $('.site-root').val();
$(document).ready(function(){
      alert(siteRoot);
});

вместо этого будет выдано предупреждение undefined

есть ли способ получить что-то, что находится в $(document).ready(), для доступа к переменным вне его, поскольку, если я помещу переменную внутри $(document).ready() он не будет доступен из других файлов js

Ответы [ 4 ]

18 голосов
/ 13 августа 2011

Вы можете сделать его глобальным:

// this is the same as your example, 
// just wanted to stress that it's a part of the window (global) object
window.siteRoot = $('.site-root').val();
$(document).ready(function(){
      alert(window.siteRoot);
});

Или, что еще лучше, используйте какое-то пространство имен, например:

var MyData = {};
MyData.siteRoot = $('.site-root').val();

$(document).ready(function(){
  alert(MyData.siteRoot);
});
3 голосов
/ 13 августа 2011

Лучший способ сделать это - создать пустую глобальную переменную или создать пространство имен для хранения переменных.Затем в document.ready просто добавьте $('.site-root').val() к этой переменной.

var siteRoot = '';

$(document).ready(function(){    
      siteRoot = $('.site-root').val();
      alert(siteRoot);
});

Таким образом, вы устанавливаете переменную siteRoot после того, как знаете, что .site-root существует и доступен во всем приложении.1005 *

2 голосов
/ 13 августа 2011

Переменная имеет значение , доступное из $(document).ready(, поскольку оно является глобальным, но вы, вероятно, получаете undefined, поскольку для .siteRoot значение недоступно до того, как документ будет готов. Просто попробуйте это:

var siteRoot = "blahblah";
$(document).ready(function(){
      alert(siteRoot);
});

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

0 голосов
/ 13 августа 2011

Тем не менее, вы можете поделиться, выполнив что-то вроде этого:

$(document).ready(function(){
    window.siteroot = $('.site-root').val();
});

И во всем приложении вы можете ссылаться на него через:

if (typeof(window.siteroot) !== "undefined") {
  //do this
}

Вы также можете лениво загрузить его:

window.get_siteRoot = function() {
   if (typeof(window.siteroot) !== "undefined")
      return window.siteroot;

   var val = $('.site-root').val();
   window.siteroot = val;
   return window.siteroot;
}

НТН.

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