webentwicklung-frage-antwort-db.com.de

Wie speichere ich einen globalen Wert (nicht unbedingt eine globale Variable) in jQuery?

Derzeit arbeite ich an einer älteren Webseite, die eine Menge JavaScript, jQuery, Microsoft-Client-JavaScript und andere Bibliotheken verwendet. Fazit: Ich kann nicht die gesamte Seite von Grund auf neu schreiben, da das Unternehmen dies nicht rechtfertigen kann. Also ... es ist was es ist. Wie auch immer, ich muss den globalen Namespace mit einer Variablen verschmutzen (ich habe es wirklich nicht versucht). Es gibt die drei Optionen, über die ich nachgedacht habe -

  1. Einfach mit einer normalen JavaScript-Deklaration speichern/abrufen - var x = 0;

  2. Verwenden Sie jQuery, um den Wert in einem DOM-Tag zu speichern/abzurufen - $("body").data("x", 0);

  3. Verwenden Sie ein verstecktes Formularfeld und setzen/holen Sie den Wert mit jQuery - $("whatever").data("x", 0);

Gibt es einen besseren Weg? Ich habe mir den vorhandenen Codestapel angesehen und glaube nicht, dass die Variable in eine Funktion unterteilt werden kann.

80
Kris Krause

Sie können einen Namespace innerhalb des jQuery-Objekts wie folgt erstellen:

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

oder:

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

Denken Sie daran, dass jede Plugin-Methode mit dem Namen 'mynamespace' überschrieben wird. Verwenden Sie daher unbedingt einen vernünftigen Namen.

100
karim79

Für mich besteht die beste Möglichkeit, mit dieser Situation umzugehen, darin, ein Objekt im Fensterobjekt zu definieren:

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

Dies würde Ihr Zielfernrohr sauber und ordentlich halten. Und wann immer Sie mit window.my_config Auf das Global zugreifen, weiß jeder, der sich den Code ansieht, dass auf ein Global zugegriffen wird.

38
ovais.tariq

Sie können einen Hash im globalen Bereich erstellen und als Namespace verwenden:

MyNamepace={}
MyNamespace.newvar = 'value'
// MyNamespace.newvar => 'value'
6

Wenn ich nur meine Praxis mit Ihnen teile, würde ich ein globales Objekt/var in der erforderlichen JavaScript-Datei mit einem sinnvollen Präfix erstellen, als würde ich auf einer Seite arbeiten, auf der dieses Objekt ein Textfeld sein wird. Dann würde ich es nennen:

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

Wenn Sie mehr als eine globale Variable haben, können Sie auch einen Namespace haben wie:

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';

Diese Variablen stehen Ihnen nach der Initialisierung auf der gesamten Website zur Verfügung.

Ich hoffe das hilft.

2
Umair Jabbar

Verwenden Sie den Unterstrich isEmpty() .

_.isEmpty('') gibt true zurück.

0
Eldad

Nur eine kurze Nachricht:

Tut die Fancybox AJAX (dh, wenn sie in einem iFrame geladen wird, sollten Sie der close-Methode "parent" hinzufügen), wie folgt:

parent.$.fancybox.close();
0
Moriz