2009-07-08 3 views
1
/************************************************************************** 
* 
* 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, 숨겨 지거나 none이면 false로 설정됩니다. 함수가 한 번 실행 된 후 다시 호출 될 때이 함수에서 사용할 수 있도록 상태의 마지막 상태를 저장하는 것은 무엇입니까? 객체 상태 {}가 전역 변수로 선언 되었기 때문입니까?글로벌 자바 스크립트 개체는 상태를 어떻게 저장합니까?

답변

2

예. 가장 바깥 쪽 종결 점에 States을 정의합니다. 즉, 실제로 window 개체의 속성 즉, window.States === States을 의미합니다. 그러나 당신이 그 기능에 대한 로컬로 새롭게을 정의하고 있기 때문에,

function foo(param) { 
    var States = param; 
} 

는 글로벌 상태 변수에 영향을 미치지 않을 것 같은 함수를 정의 할 수 있었다. (그러나 해당 함수 내에서 window.States을 사용하여 전역 상태 변수에 액세스 할 수도 있습니다.)

+0

그래서 함수에서 조작되었지만 상태가 "States [col] .IsOpen =! States [col] .IsOpen;"함수의 끝에서 전환 될 때 globa에 영향을 미치지 않으면 다음에 호출 할 때 함수의 맨 위에 무엇이 있는지 어떻게 알 수 있습니까? –

+0

함수 내부에서 상태를 재정의하지 않으므로 전역 변수에 영향을 미칩니다. – AKX

1

확실히 맞습니다. 상태는 전역 네임 스페이스에서 선언되며 모든 JavaScript 함수에서 사용할 수 있습니다 (같은 이름의 변수로이를 숨기지 않음). 그것은 그것을 사용하는 함수 밖에서도 가치를 유지할 것입니다.

1

자바 스크립트의 전역 변수는 페이지가 새로 고침되거나 언로드 될 때까지 활성화됩니다.

0

예 (활성화 될 때까지 활성); 이것이 제 문제입니다. 전역 배열에서 모든 팝업 (즉, 저장되지 않은 입력 - 양식)을 저장하지만, 새로 고친 후에는 내 팝업 배열의 내용이 비어있어 팝업을 찾을 수 없습니다. 브라우저에 데이터 영역을 브라우저 전체에 저장할 수있는 영역이 있습니까?

+0

쿠키는 내가 결국 사용하는 것입니다. –

관련 문제