将文档元素分配给全局变量

时间:2012-10-22 18:18:07

标签: javascript

我想将文档元素分配给全局变量,以便我能够在代码中的任何位置使用这些元素。

我的代码:

// 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中读取。

1 个答案:

答案 0 :(得分:3)

问题是drop函数中的所有statusprocess ...变量都是本地变量 - 它们引用它的参数,而不是前面定义的变量。 / 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函数中处理这些变量;后者显然是优越的,因为你不受限制的选择范围。