3

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

我的代码:

// 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.innerHTML) 的内容,但不能在函数 handleDrop 中读取。

4

1 回答 1

3

问题是函数中的所有这些drop, status... 变量process都是本地变量——它们引用它的参数,而不是前面定义的变量。

如果这些是在最外层定义的(即,不在任何函数体中),您可以像这样访问(和更改)它们:

window.drop = document.getElementById(drop);
window.status = document.getElementById(status);
window.show = document.getElementById(show);

但我实际上建议另一种方式:对参数和“封闭”变量使用单独的名称。像这样:

function process(dropId, statusId, showId) {
    if (document.readyState == 'complete') {
        // init elements
        drop = document.getElementById(dropId);
        status = document.getElementById(statusId);
        show = document.getElementById(showId);
    }
}

这两种方式都允许您在handleDrop函数中处理这些变量;后者显然更胜一筹,因为您不受选择范围的限制。

于 2012-10-22T18:23:40.330 回答