我想将文档元素分配给全局变量,以便我能够在代码中的任何位置使用这些元素。
我的代码:
// document elements
var drop = null;
var status = null;
var show = null;
function process (drop, status, show) {
if (document.readyState == 'complete') {
// init elements
drop = document.getElementById(drop);
status = document.getElementById(status);
show = document.getElementById(show);
}
// init event handlers
drop.addEventListener('drop', handleDrop, false);
}
function handleDrop (evt) {
// do something
}
问题是我无法使用函数handleDrop中的全局变量对文档元素执行任何操作,而在函数处理中,一切都按原样运行...
编辑:例如,我可以在函数过程中读取元素show(show.innerHTML)的内容,但不能在函数handleDrop中读取。
答案 0 :(得分:3)
问题是drop
函数中的所有status
,process
...变量都是本地变量 - 它们引用它的参数,而不是前面定义的变量。 / p>
如果这些是在最外层定义的(即不在任何函数体内),你可以像这样访问(和改变)它们:
window.drop = document.getElementById(drop);
window.status = document.getElementById(status);
window.show = document.getElementById(show);
但我实际上建议采用另一种方式:对params和'closedured-over'变量使用单独的名称。像这样:
function process(dropId, statusId, showId) {
if (document.readyState == 'complete') {
// init elements
drop = document.getElementById(dropId);
status = document.getElementById(statusId);
show = document.getElementById(showId);
}
}
两种方式都允许您在handleDrop
函数中处理这些变量;后者显然是优越的,因为你不受限制的选择范围。