如何从内联事件处理程序中引用全局变量?

时间:2010-12-11 19:50:47

标签: javascript html dom javascript-events

JavaScript的:

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

HTML:

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

每当事件触发时,它都会发出“未定义”警报。 lang变量是全局变量,为什么内联事件处理程序代码不能引用它?

2 个答案:

答案 0 :(得分:4)

  1. 确保JavaScript文件显式设置全局变量:

    window['lang'] = {'edit': 'Edit'};
    
  2. 确保您的事件处理程序代码明确引用全局“lang”变量:

    <select onchange='alert(window.lang.edit)'>
    
  3. 第一个可能已经没问题了,但我补充说只是为了确保。第二件事,嗯,“onfoo”属性值的解释是微妙和奇怪的。如果在<select>周围的<form>标记上有<select> DOM元素“lang”属性的“lang”属性,则引用“onclick”值中的标识符“lang”将获取 而不是您在JavaScript文件中定义的全局“lang”。您的“onclick”值将变为一个函数(以使其作为事件处理程序)由一个看起来或多或少像这样的进程:

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

    这很奇怪,但实际上这种事件处理程序代码会发生什么。

答案 1 :(得分:0)

javascript中的每个全局对象都是window对象的属性。所以你应该写 window.lang = {'edit':'Edit'};