Как сохранить глобальное значение (не обязательно глобальную переменную) в jQuery? - PullRequest
80 голосов
/ 19 мая 2010

В настоящее время я работаю над устаревшей веб-страницей, которая использует массу JavaScript, jQuery, JavaScript-клиента Microsoft и другие библиотеки. Суть - я не могу переписать всю страницу с нуля, так как бизнес не может это оправдать. Итак ... это то, что есть. В любом случае, мне нужно загрязнить (я действительно не слишком старался) глобальное пространство имен переменной. Есть три варианта, о которых я думал -

  1. Просто сохраните / получите его, используя обычное объявление JavaScript - var x = 0;

  2. Используйте jQuery для сохранения / получения значения в теге DOM - $("body").data("x", 0);

  3. Используйте скрытое поле формы и установите / получите значение с помощью jQuery - $("whatever").data("x", 0);

Есть ли лучший способ? Я посмотрел на существующую кучу кода, и я не верю, что переменная может быть ограничена в функции.

Ответы [ 6 ]

100 голосов
/ 19 мая 2010

Вы можете создать пространство имен внутри объекта jQuery, например:

$.mynamespace = { 
    myVar : "something", 
    myVar2 : "somethingElse" 
}; 

или

$.mynamespace = {};
$.mynamespace.myVar = "something";
$.mynamespace.myVar2 = "somethingElse";

Помните, что любой метод плагина с именем 'mynamespace' будет перезаписан, поэтому обязательно используйте разумное имя.

38 голосов
/ 24 мая 2010

Для меня лучший способ справиться с этой ситуацией - определить объект в объекте окна:

window.my_config =
{
    my_var1 : 1,
    my_var1 : 2,
    my_var1 : 3
};

Это сделает вашу прицел аккуратной и чистой. И всякий раз, когда вы обращаетесь к глобалу, используя window.my_config, любой, кто просматривает код, будет знать, что к глобалу обращаются.

6 голосов
/ 19 мая 2010

Вы можете создать хеш в глобальной области видимости и использовать его в качестве пространства имен:

MyNamepace={}
MyNamespace.newvar = 'value'
// MyNamespace.newvar => 'value'
2 голосов
/ 19 мая 2010

Просто поделившись с вами своей практикой, я бы сделал глобальный объект / var в требуемом файле JavaScript с разумным префиксом, как если бы я работал над страницей, где этот объект будет текстовым полем, я бы назвал его :

g_TxtMyValue = 'value';    // g_ specifies it to be a global variable, it is one
                           // of the many conventions used

Если у вас более одной глобальной переменной, вы также можете иметь пространство имен, например:

my_txt = {};  // For a real site I would use a prefix relative to the project
              // name instead of "my".

my_txt.testValueOne = 'Value one';
my_txt.testValueOne = 'Value two';

Эти переменные будут доступны вам на веб-сайте после их инициализации.

Надеюсь, это поможет.

0 голосов
/ 22 января 2016

Используйте подчеркивание isEmpty().

_.isEmpty('') вернет true.

0 голосов
/ 23 июля 2014

Просто короткое уведомление:

fancybox выполняет AJAX (имеется в виду: если он загружается в iFrame, вы должны добавить «parent» в метод close), например:

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