JavaScript代码:
lang = {'edit': 'Edit'}; // global variable
HTML格式:
<select onchange="alert(lang.edit)"> // alerts undefined
每当事件触发时,它会警告“未定义”。
lang
变量是全局变量,那么为什么内联事件处理程序代码不能引用它? 最佳答案
确保JavaScript文件显式设置了全局变量:
window['lang'] = {'edit': 'Edit'};
确保事件处理程序代码显式引用全局“lang”变量:
<select onchange='alert(window.lang.edit)'>
第一个可能已经好了,但我补充这只是为了确保。第二件事,“onfoo”属性值的解释是微妙而怪异的。如果
<select>
DOM元素的“lang”属性或<form>
标记上围绕<select>
的“lang”属性,那么“onclick”值中对标识符“lang”的引用将获取该属性,而不是JavaScript文件中定义的全局“lang”。您的“onclick”值由一个或多或少类似于以下内容的进程转换为一个函数(以便它作为事件处理程序工作):var handler = new Function("event", "with (this.form) { with (this) { alert(lang.edit); }}");
这很奇怪,但这就是那种事件处理程序代码的实际情况。