2010-12-17 6 views
0

Ich habe den folgenden CodeAccess Variablen Javascript/jquery

$('#first').click(function() { 
    myVar = $(this).next().val(); 
}); 

$('#second').blur(function() { 
    console.log(myVar); 
}); 

Wie meineVar innerhalb #Zweites zugreifen?

Antwort

5

Es ist auf den breiteren Kontext des Codes abhängt. Sie können dies tun:

(function() { 
    var myVar; 

    $('#first').click(function() { 
     myVar = $(this).next().val(); 
    }); 

    $('#second').blur(function() { 
     console.log(myVar); 
    }); 
})(); 

Das schafft eine anonyme Funktion und ruft es sofort. Der Zweck der anonymen Funktion besteht darin, einen Container für myVarohne bereitzustellen, der eine globale Variable macht. Globale Variablen werden im Allgemeinen am besten vermieden (nicht zuletzt, weil sie zu Eigenschaften des Objekts window werden, auf dem bereits allerlei Arten von Junk stecken). Insbesondere werden die Funktionen, die Sie Ihren Ereignissen click und blur zuweisen, Schließungen über die Daten innerhalb des Aufrufs an die anonyme Funktion. Sie haben Zugriff auf myVar, aber nichts anderes tut. More here.

Wenn sich Ihr Code bereits in einem enthaltenden Bereich befindet oder Sie nicht daran interessiert sind, dem globalen Namespace hinzuzufügen, benötigen Sie die anonyme Funktion nicht.

+2

+1 für den Verschluss –

+0

+1. Korrekte Antwort. Ich habe keine Ahnung, warum alle '(function() {})()' statt '(function() {}())' machen. Letzteres scheint mir viel natürlicher zu sein. Die äußeren Klammern werden auch nicht benötigt, aber sie signalisieren etwas, das weitergeht. – jwueller

+0

@elusive: warum nicht eine Frage stellen, warum? –

2

definieren meineVar im Außenbereich:

var myVar; 

$('#first').click(function() { 
    myVar = $(this).next().val(); 
}); 

$('#second').blur(function() { 
    console.log(myVar); 
}); 
0

T.J. Crowders Antwort macht was du willst. Dies ist nur eine Alternative (die jQuery data storage Methoden):

$('#first').click(function() { 
    // Assign this element to have data with the key 'myVar' 
    $(this).data('myVar', $(this).next().val()); 
}); 

$('#second').blur(function() { 
    // Read the data from the other element 
    console.log($('#first').data('myVar')); 
}); 
0

Die Antworten hier sind gut. Aber ich denke, Sie sind an dem Punkt, an dem Sie davon profitieren würden, Crockford's JS slideshow zu lesen. Es ist sehr gut und erklärt einige Fragen zu Ihrer Frage.

Verwandte Themen