2010-12-11 4 views
2

JavaScript:Как ссылаться на глобальную переменную из встроенного обработчика событий?

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

HTML:

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

Всякий раз, когда срабатывает событие, он предупреждает "не определено". Переменная lang является глобальной, поэтому почему не может ссылаться на код обработчика inline-кода?

+4

Там нет JSON, только обычный объект (и синтаксис по-прежнему не был бы JSON, если вы вытащили его из JS, JSON использует только двойные кавычки). В вашем вопросе нет причин, чтобы он не работал, проблема, скорее всего, в другом месте. – Quentin

ответ

4
  1. Убедитесь, что файл JavaScript явно устанавливая глобальную переменную:

    window['lang'] = {'edit': 'Edit'}; 
    
  2. Убедитесь, что ваш код события обработчик явно относится к глобальной «языки» переменной:

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

Первый, вероятно, уже хорошо, но я добавляю это только для того, чтобы убедиться. Во-вторых, интерпретация значений атрибутов «onfoo» является тонкой и странной. Если есть атрибут «языки» из <select> DOM элемента или атрибут «языки» на <form> теге окружающих <select>, то ссылку на идентификатор «языки» в значении «OnClick» подберут что вместо глобального «lang», который вы определяете в файле JavaScript. Ваш «OnClick» значение превращается в функцию (для того, чтобы работать в качестве обработчика события) с помощью процесса, который выглядит более или менее, как это:

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

Это странно, но это на самом деле то, что происходит с таким кодом кода обработчика событий.

+0

проблема решена. Но могу ли я спросить, почему это невозможно для вызова события? также я попробовал этот $ lang.edit, и объект был $ lang = {...} .. таким образом относится к jQuery, который я использую в этом проекте.!? – Dewan159

+1

Когда вы использовали «$ lang» в качестве имени переменной, это сработало? Кроме того, как выглядит остальная часть Javascript вокруг этой декларации «lang»? – Pointy

0

Каждый глобальный объект в javascript является свойством объекта window. Поэтому вы должны написать window.lang = {'edit': 'Edit'};

Смежные вопросы