2010-12-11 8 views
2

JavaScript:Wie referenziere ich eine globale Variable innerhalb eines Inline-Event-Handlers?

lang = {'edit': 'Edit'}; // global variable 

HTML:

<select onchange="alert(lang.edit)"> // alerts undefined 

Jedes Mal, wenn das Ereignis ausgelöst wird, alarmiert es "unbestimmt". Die Variable lang ist global. Warum kann der Inline-Event-Handler-Code nicht darauf verweisen?

+4

Dort ist kein JSON, nur ein normales Objekt (und die Syntax wäre immer noch nicht JSON, wenn Sie es aus dem JS herausgenommen hätten, JSON verwendet nur doppelte Anführungszeichen). Es gibt keinen Grund in Ihrer Frage, dass es nicht funktioniert, das Problem ist wahrscheinlich woanders. – Quentin

Antwort

4
  1. Stellen Sie sicher, dass die JavaScript-Datei eine globale Variable explizit setzt:

    window['lang'] = {'edit': 'Edit'}; 
    
  2. Stellen Sie sicher, explizit Ihren Event-Handler-Code auf die globale "lang" Variable verweist:

    <select onchange='alert(window.lang.edit)'> 
    

Die erste ist wahrscheinlich schon in Ordnung, aber ich füge hinzu, nur um sicherzustellen, dass. Die zweite Sache, nun, die Interpretation von "Onfoo" Attributwerten ist subtil und seltsam. Wenn es ein „lang“ ist Attribut des <select> DOM-Elements oder ein „lang“ -Attribut auf einen <form> Tag den <select> umgibt, dann einen Verweis auf die Kennung „lang“ in dem „Onclick“ Wert wird abholen dass statt der globalen "lang", die Sie in der JavaScript-Datei definieren. Ihr „Onclick“ Wert wird in eine Funktion (um es als Event-Handler zu arbeiten) gedreht von einem Prozess, der mehr oder weniger wie folgt aussieht:

var handler = new Function("event", "with (this.form) { with (this) { alert(lang.edit); }}"); 

Es ist komisch, aber das ist eigentlich das, was passiert, mit dieser Art von Event-Handler-Code.

+0

Problem gelöst .. aber kann ich fragen, warum es von Event Call nicht erreichbar ist? Ich habe auch versucht, diese $ lang.edit und das Objekt war $ lang = {...} .. dieser Weg bezieht sich auf jQuery, die ich dieses Projekt verwende.!? – Dewan159

+1

Wenn Sie "$ lang" als Variablennamen verwendet haben, hat es funktioniert? Wie sieht der Rest des Javascript um die "lang" -Deklaration aus? – Pointy

0

Jedes globale Objekt in Javascript ist eine Eigenschaft des Fensterobjekts. Du solltest also schreiben window.lang = {'edit': 'Edit'};

Verwandte Themen