Могу ли я установить глобальные переменные и использовать их в других готовых документах событиях? - PullRequest
3 голосов
/ 15 августа 2011

Я использую jQuery 1.6.2 и ColdFusion 9.

Когда запрашивается страница, включается много файлов.Несколько файлов содержат готовый метод документа jQuery.Я хочу установить некоторые глобальные переменные, которые я могу использовать на всей странице.Например, я хочу использовать эти переменные для моих слайдов:

 SlideUpRate = 400;
 SlideDownRate = SlideUpRate * 2;

Кажется, что это работает противоречиво.Есть ли способ заставить его работать последовательно?

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Ответ

В файле index.cfm я задаю свои глобальные переменные, которые могут использоваться и повторно использоваться в других jQuery на всей отображаемой странице.

<script type="text/javascript">
var SlideUpRate = 250;
var SlideDownRate = SlideUpRate * 2;
var HideRate = 250;
var ShowRate = HideRate * 2;
var ImageUnsaved = "layout/checkbox_unsaved.png";
var ImageSaved = "layout/checkbox_saved.png";
$(document).ready(function() {

   // other jQuery stuff

});

Ответы [ 2 ]

20 голосов
/ 15 августа 2011

Да, вы можете добавить их в глобальное пространство имен:

var globalVar1;
$(document).ready(function(){
    globalVar1 = "something";
});
$(document).ready(function(){
    alert(globalVar1);
});

http://jsfiddle.net/QDPAm/

Если вы не хотите загрязнять глобальную область видоизменения с помощью нескольких переменных, вы можете сделатьобъект, содержащий эти переменные:

var vars = {};

И затем в ваших ready функциях добавьте переменные к объекту vars.

$(document).ready(function(){
    vars.my_variable_1 = "something";
});

И еще одна функция ready:

$(document).ready(function(){
    alert(vars.my_variable_1);
});

http://jsfiddle.net/aalouv/QDPAm/1/

Я не понимаю, почему ваш пример не должен работать.Может быть, потому что вы пытаетесь получить доступ к некоторым переменным, прежде чем они установлены?

var vars = {};
$(document).ready(function(){
    alert(vars.my_variable_1); // undefined
});

$(document).ready(function(){
    vars.my_variable_1 = "something";
});

http://jsfiddle.net/aalouv/QDPAm/3/

Кроме того, создание переменных без индикатора var сначала добавит переменную в глобальную область, так что вы можете получить доступ к переменной с помощью: window или просто без каких-либопространство имен перед.

$(document).ready(function(){
    my_variable_1 = "something";
});
$(document).ready(function(){
    alert(window.my_variable_1);
    alert(my_variable_1);
});

http://jsfiddle.net/aalouv/QDPAm/2/

1 голос
/ 16 августа 2011

Evik,

Я бы использовал литерал объекта для хранения локальных переменных, например:

  var pageProperties = {
    slideUpRate: 250,
    hideRate: 250,
    imageUnsaved: "layout/checkbox_unsaved.png",
    imageSaved: "layout/checkbox_saved.png",

    getSlideDownRate: function() {
        return slideUpRate * 2;
    },

    showRate : function() {
        return hideRate * 2;
    }
  };

Теперь, когда вы захотите получить доступ к этим свойствам уровня страницы, вы будете использоватьлитерал объекта:

pageProperties.slideUpRate;
pageProperties.getSlideDownRate();

Одно преимущество, которое вы получите, поместив рассчитанные скорости в функцию, состоит в том, что вы можете инкапсулировать функциональность и сделать эти функции более удобными в обслуживании и переносимыми.

Еще одна вещь, которую я бы сделал, - это очистить несколько функций $ (document) .ready, используя больше литералов объектов, как обсуждалось в этом сообщении в блоге Ребеккой Мерфи: http://blog.rebeccamurphey.com/2009/10/15/using-objects-to-organize-your-code.

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