So übergeben Sie eine Funktion a_href = $(this).attr('href');
Wert zu global a_href
machen a_href="https://stackoverflow.com/questions/18995647/home"
var a_href;
$('sth a').on('click', function(e){
a_href = $(this).attr('href');
console.log(a_href);
//output is "https://stackoverflow.com/questions/18995647/home"
e.preventDefault();
}
console.log(a_href);
//Output is undefined
Ihr Code sieht gut aus, mit Ausnahme der Möglichkeit, dass die Variablendeklaration, wenn sie sich in einem Dom-Lesehandler befindet, keine globale Variable ist, sondern eine Abschlussvariable
jQuery(function(){
//here it is a closure variable
var a_href;
$('sth a').on('click', function(e){
a_href = $(this).attr('href');
console.log(a_href);
//output is "https://stackoverflow.com/questions/18995647/home"
e.preventDefault();
}
})
Um die Variable global zu machen, besteht eine Lösung darin, die Variable im globalen Gültigkeitsbereich zu deklarieren
var a_href;
jQuery(function(){
$('sth a').on('click', function(e){
a_href = $(this).attr('href');
console.log(a_href);
//output is "https://stackoverflow.com/questions/18995647/home"
e.preventDefault();
}
})
Eine andere Möglichkeit besteht darin, die Variable als Eigenschaft des Fensterobjekts festzulegen
window.a_href = $(this).attr('href')
Warum Konsolendruck undefiniert ist
Sie erhalten die Ausgabe als undefined
Denn obwohl die Variable deklariert ist, Sie sie nicht mit einem Wert initialisiert haben, wird der Wert der Variablen erst nach dem festgelegt a
Das Element wird angeklickt, bis die Variable den Wert hat undefined
. Wenn Sie die Variable nicht deklarieren, wird ein Fehler ausgegeben Referenzfehler
Legen Sie die Variable im Fenster fest:
window.a_href = a_href;
Sie können die Deklaration globaler Variablen vermeiden, indem Sie sie direkt zum globalen Objekt hinzufügen:
(function(global) {
...
global.varName = someValue;
...
}(this));
Ein Nachteil dieser Methode besteht darin global.varName wird erst existieren, wenn diese bestimmte Codezeile ausgeführt wird, aber das kann leicht umgangen werden.
Sie könnten auch eine Anwendungsarchitektur in Betracht ziehen, in der solche Globals in einem Abschluss gespeichert werden, der allen Funktionen gemeinsam ist, die sie benötigen, oder als Eigenschaften eines entsprechend zugänglichen Datenspeicherobjekts.
Das einzige Problem ist, wenn die
var a_href
befindet sich in einem dom-ready-Handler … die Variablendeklaration muss im globalen Bereich liegen oder verwendet werdenwindow.a_href = $(this).attr('href')
– Arun P Johny
25. September 2013 um 3:23