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); }}");

这很奇怪,但这就是那种事件处理程序代码的实际情况。

10-05 20:53
查看更多