Глобальная переменная с jquery - PullRequest
4 голосов
/ 22 марта 2012

У меня есть файл js test.js, который содержит глобальную переменную global_var и функцию fn1(), которая изменяет переменную global_var:

var global_var="initial_value";
function fn1(){
    global_var="Value1";
    alert("global_var="+global_var);
}

затем я выполняю fn1() из моего page1.html, который отправляет меня на page2.html:

<li><a href="page2.html" onclick='fn1();'></a></li>//this returns "global_var=Value1"

Затем в page2.html я хочу использовать переменную global_var, но континуум global_var не изменяется, это «initial_value» !!

<script src="test.js"></script>
<script>
   $('#mypage').live('pageshow', function(event) {
   alert(global_var); //this returns "initial_value"!!! 
});
</script>

Ответы [ 4 ]

3 голосов
/ 22 марта 2012

Каждый раз, когда загружается новая страница, javacript повторно инициализируется, и поэтому любое изменение в переменной теряется. Вы можете сохранить это значение в cookie-файле и получить его в page2

стр.1

var global_var="initial_value";
function fn1(){
    global_var="Value1";
    alert("global_var="+global_var);
    $.cookie('global_var', global_var);
}

стр. 2

<script src="test.js"></script>
<script>
   $('#mypage').live('pageshow', function(event) {
   var global_var = $.cookie('global_var');
   alert(global_var); //this returns "initial_value"!!! 
});

</script>

для этого требуется этот плагин https://github.com/carhartl/jquery-cookie

2 голосов
/ 22 марта 2012

«Глобальные» переменные в JavaScript в браузерах - это действительно переменные ширины страницы.Они существуют только до тех пор, пока существует объект window, на котором они были созданы (поскольку все глобальные переменные являются свойствами window).Когда вы меняете страницы, старый объект window уничтожается, а новый создается, поэтому ваша переменная больше не существует.

Чтобы сохранить информацию между страницами, подумайте:

  • Использование файла cookie.
  • Использование HTML5 «локальное хранилище» (обратите внимание, что в IE7 и более ранних версиях этого нет, но в IE8 и более поздних версиях ; в некоторых мобильных браузерах этого не может).*
  • Использование состояния на стороне сервера (но это не очень хорошо масштабируется).
2 голосов
/ 22 марта 2012

Вы не вызываете функцию на странице 2.Каждый раз, когда вы загружаете на другую страницу, ваш JS сбрасывается ... Сохраните его в СЕССИИ или локально, например, если вы хотите сохранить его!

0 голосов
/ 22 марта 2012

Если используется только две страницы, вы можете использовать простую строку запроса

Page1

var k="initial_value";
function fn1(){
  k="Value1";
  //  alert("k="+k);
  location.href='page2.html?k='+k;
}

Page2

function querystring(key) {
   var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
   var r=[], m;
   while ((m=re.exec(document.location.search)) != null) r.push(m[1]);
   return r;
}

<script>
   $('#mypage').live('pageshow', function(event) {
   alert(querystring('k'));  
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...