Убедитесь, что файл JavaScript явно устанавливая глобальную переменную:
window['lang'] = {'edit': 'Edit'};
Убедитесь, что ваш код события обработчик явно относится к глобальной «языки» переменной:
<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); }}");
Это странно, но это на самом деле то, что происходит с таким кодом кода обработчика событий.
Там нет JSON, только обычный объект (и синтаксис по-прежнему не был бы JSON, если вы вытащили его из JS, JSON использует только двойные кавычки). В вашем вопросе нет причин, чтобы он не работал, проблема, скорее всего, в другом месте. – Quentin