/**************************************************************************
*
* 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です。関数が一度実行された後、再び呼び出されると、この関数で使用できるように状態の最後の状態を保存するのは何ですか?オブジェクトステート{}がグローバルとして宣言されているからですか?グローバルなJavascriptオブジェクトはどのように状態を保存しますか?
したがって、関数内で操作されてもglobaに影響を与えない場合、関数 "States [col] .IsOpen =!States [col] .IsOpen;"の最後に状態が切り替わると、 次回に呼び出されたときに関数の先頭に何があるのか、どうやって知っていますか? –
あなたの場合、関数内で状態を再定義しないので、グローバルに影響します。 – AKX