全局Javascript对象如何保存状态?

时间:2009-07-08 20:38:05

标签: javascript html dom

/**************************************************************************
 *
 * Function:    toggleVis
 *
 * Description: Following Function hides and expands the main column.
 *              
 *
***************************************************************************/
// Set the default "show" mode to that specified by W3C DOM
// compliant browsers

  var showMode = 'table-cell';


// However, IE5 at least does not render table cells correctly
// using the style 'table-cell', but does when the style 'block'
// is used, so handle this

  if (document.all) showMode='block';

// This is the function that actually does the manipulation

var States = { };

function toggleVis(col){

    if (!States[col] || States[col].IsOpen == null)
    {
        States[col] = {isOpen : true}; // This assumes the cell is already shown
        //States[col] = {isOpen : false}; // This assumes the cell is already hidden
    } 

    //mode =  States[col].IsOpen ? showMode : 'none';
    mode =  States[col].IsOpen ? 'none' : showMode; //starts from closed, next click need open

    cells = document.getElementsByName(col);
    for(j = 0; j < cells.length; j++) cells[j].style.display = mode;

    States[col].IsOpen = !States[col].IsOpen;
}

此函数隐藏并显示html表的列。 当我调用此函数时,对象状态相应地切换,如果展开则为true,如果隐藏则为false,否则为false。函数执行一次后,什么保存状态的最后状态,以便在再次调用时可以在此函数中使用它?是因为对象States {}被声明为全局?

4 个答案:

答案 0 :(得分:2)

是。您在最外层的闭包中定义States,这意味着它实际上也是window对象的属性,即window.States === States。但是,你要定义像

这样的函数吗?
function foo(param) {
    var States = param;
}

它不会影响全局States变量,因为您将其重新定义为该函数的本地变量。 (但您也可以通过在该函数中使用window.States来访问全局States变量。)

答案 1 :(得分:1)

绝对正确。状态在全局命名空间中声明,并且可用于所有javascript函数(不会使用相同名称的变量隐藏它)。它会在任何使用它的函数之外保留它的值。

答案 2 :(得分:1)

javascript中的全局变量处于活动状态,直到页面被刷新或卸载。

答案 3 :(得分:0)

是的,他们是(活跃直到刷新); 这是我的问题;我将所有弹出窗口(即未保存的输入表单)保存在全局数组中,但刷新后,我无法检索弹出窗口,因为我的弹出数组的内容为空;浏览器中是否有一个区域,我可以在浏览器范围内存储数据结构?