Tabellen und Cookies, Spalten ausblenden

flashOr

Erfahrenes Mitglied
Hallo,

ich möchte eine Tabelle erzeugen mit der es möglich ist auf den Kopf einer Spalte zu klicken und diese dann verschwindet, danach soll ein Link erstellt werden welcher den Namen der ausgeblendeten Spalte trägt. Klickt man auf diesen Link wird die Tabellenspalte wieder dargestellt. Soweit so gut. Nun möchte ich aber das sich die Seite merkt welche Spalten ausgeblendet sind und wenn man den Browser schließt und die Seite erneut aufruft soll sich alles so darstellen wie beim verlassen.

Eigentlich hab ich schon 95% der Aufgabe gelöst. Was mir nur noch fehlt ist eine Kleinigkeit und zwar wenn ich die Cookies auslese dann sollen die Spalten ja wieder automatisch ausgeblendet werden. Und genau das funktioniert nicht, bzw. es funktioniert aber nur wenn ich mir den Inhalt der Cookies per alert() ausgeben lasse. Und genau das ist was ich nicht verstehe. Es gibt keinerlei Fehlermeldung sondern es funktioniert einfach nicht wenn ich das alert() weglasse.

Ich poste am besten mal den Code.
HTML:
HTML:
<div id="hiddenColumns" >
</div>
<table id="aTable">
    <tr>
    <td id="<%= raiseCOL_ID(COL_ID) %>" ONCLICK="hideColumn(<%=COL_ID%>);" class="tableHead">
    Model
    </td>
    <td id="<%= raiseCOL_ID(COL_ID) %>" ONCLICK="hideColumn(<%=COL_ID%>);" class="tableHead">
    Serial#
    </td>
</tr>
<tr>
    <td><input type="text" onblur="getReturns();"></td>
    <td><input type="text" onblur="getReturns();"></td>
</tr>
</table>
Und hier das JS bei dem das alert() im Moment auskommentiert ist, entfernt man den Kommentar dann funktioniert es:
Code:
function getReturns() {
getHidden();
}
function hideColumn (colIndex) {
  var table = document.all ? document.all.aTable :
              document.getElementById('aTable');
  for (var r = 0; r < table.rows.length; r++)
	try {
    table.rows[r].cells[colIndex].style.display = 'none';
    }
    catch (e) {
    }
    addToHidden(document.getElementById(colIndex).innerText,colIndex);
    set_cookie(colIndex,'true',2);
}

function getHidden() {

    for(k=0;k<10;k++) {
   		cookie = get_cookie(k);
		//alert(cookie);
   		if (cookie == "true") {
   			hideColumn(k);
   		}
    }
}

function showColumn (colIndex) {
  var table = document.all ? document.all.aTable :
              document.getElementById('aTable');
  for (var r = 0; r < table.rows.length; r++)
    try {
    table.rows[r].cells[colIndex].style.display = '';
    }
    catch (e) {
    }

  for (var i = 0; i < document.getElementById('hiddenColumns').childNodes.length; i++) {
  	id = "li_hidden_"+colIndex;
  	given_ID = document.getElementById('hiddenColumns').childNodes.item(i).getAttribute('id');
	if( given_ID == id) {
	document.getElementById('hiddenColumns').removeChild(document.getElementById('hiddenColumns').childNodes.item(i));
	}
  }

	set_cookie(colIndex,'false',2);
}
function addToHidden (text,id) {
	newLI = document.createElement("li");

	ID = id;
	newID = "hidden_"+id;
	newLI_ID= "li_hidden_"+id;
	newLI.setAttribute('id', newLI_ID);
	newA = document.createElement("a");
	newA.setAttribute('id', newID);
	newA.setAttribute('href', 'javascript:showColumn('+ID+')');

	newTXT = document.createTextNode(text);
	document.getElementById('hiddenColumns').appendChild(newLI).appendChild(newA).appendChild(newTXT);
}

function get_cookie( cookieName )
{
    strValue = false;

    if( strCookie = document.cookie )
        {
            if( arrCookie = strCookie.match( new RegExp( cookieName + '=([^;]*)', 'g')))
                {
                    strValue=RegExp.$1;
                }
        }
    return(strValue);
}

function set_cookie(cookieName,cookieValue,intDays)
{
    if(!is_cookie_enabled())
        {
            return false;
        }

    objNow = new Date();
    strExp = new Date( objNow.getTime() + ( intDays * 86400000) );
    document.cookie = cookieName + '=' +
                      cookieValue + ';expires=' +
                      strExp.toGMTString() + ';';
    return true;
}

function delete_cookie(cookieName)
{
    if(document.cookie)
        {
            document.cookie = cookieName + '=' +
                              get_cookie(cookieName) +
                              ';expires=Thu, 01-Jan-1970 00:00:01 GMT;';
            return true;
        }
    return false;
}
function is_cookie_enabled()
{
    if(typeof navigator.cookieEnabled!='undefined')
        {
            return navigator.cookieEnabled;
        }

    set_cookie('testcookie','testwert',1);

    if(!document.cookie)
        {
            return false;
        }

    delete_cookie('testcookie');
    return true;
}

// edit

Was macht alert, was ich mit anderen Funktionen nicht hinbekomme? Ist es möglich den Code von alert() einzusehen? Feuert es irgendwelche events die ich nicht kenne? Ich bin einfach ratlos...
 
Hi,

folgendes Dokument funktioniert bei mir in IE und Firefox:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>www.tutorials.de</title>
<script type="text/javascript">
  <!--
function getReturns() {
	getHidden();
}

function hideColumn (colIndex) {
  var table = document.all ? document.all.aTable :
              document.getElementById('aTable');
  for (var r = 0; r < table.rows.length; r++)
	  try {
	    table.rows[r].cells[colIndex].style.display = 'none';
	  }catch (e) {}
  // Präfix für ZellenIDs zugefügt
  addToHidden(document.getElementById("col_"+colIndex).innerHTML, colIndex);
  set_cookie(colIndex,'true',2);
}

function getHidden() {
    // cookie durch blnCookie ersetzt
    for(k=0;k<10;k++) {
   		blnCookie = get_cookie(k);
		//alert(blnCookie);
   		if (blnCookie == "true") {
   			hideColumn(k);
   		}
    }
}

function showColumn (colIndex) {
  var table = document.all ? document.all.aTable :
              document.getElementById('aTable');
  for (var r = 0; r < table.rows.length; r++)
    try {
    	table.rows[r].cells[colIndex].style.display = '';
    }catch (e){}

  // Link entfernen
  document.getElementById("hiddenColumns").removeChild(document.getElementById("li_hidden_"+colIndex));

	set_cookie(colIndex,'false',2);
}

function addToHidden (text, id) {
	newLI = document.createElement("li");

	ID = id;
	newID = "hidden_"+id;
	newLI_ID= "li_hidden_"+id;
	newLI.setAttribute('id', newLI_ID);
	newA = document.createElement("a");
	newA.setAttribute('id', newID);
	newA.setAttribute('href', 'javascript:showColumn('+ID+')');

	newTXT = document.createTextNode(text);
	document.getElementById('hiddenColumns').appendChild(newLI).appendChild(newA).appendChild(newTXT);
}

function get_cookie( cookieName )
{
    strValue = false;

    if( strCookie = document.cookie )
        {
            if( arrCookie = strCookie.match( new RegExp( cookieName + '=([^;]*)', 'g')))
                {
                    strValue=RegExp.$1;
                }
        }
    return(strValue);
}

function set_cookie(cookieName,cookieValue,intDays)
{
    if(!is_cookie_enabled())
        {
            return false;
        }

    objNow = new Date();
    strExp = new Date( objNow.getTime() + ( intDays * 86400000) );
    document.cookie = cookieName + '=' +
                      cookieValue + ';expires=' +
                      strExp.toGMTString() + ';';
    return true;
}

function delete_cookie(cookieName)
{
    if(document.cookie)
        {
            document.cookie = cookieName + '=' +
                              get_cookie(cookieName) +
                              ';expires=Thu, 01-Jan-1970 00:00:01 GMT;';
            return true;
        }
    return false;
}

function is_cookie_enabled()
{
    if(typeof navigator.cookieEnabled!='undefined')
        {
            return navigator.cookieEnabled;
        }

    set_cookie('testcookie','testwert',1);

    if(!document.cookie)
        {
            return false;
        }

    delete_cookie('testcookie');
    return true;
}

// Nach dem Laden die Tabelle und Links anpassen
window.onload = getHidden;
 //-->
</script>
</head>
<body>

<ul id="hiddenColumns" >
</ul>
<table id="aTable" style="background: #666;">
    <tr>
    <td id="col_0" onclick="hideColumn(0);" class="tableHead">
    Model
    </td>
    <td id="col_1" onclick="hideColumn(1);" class="tableHead">
    Serial#
    </td>
</tr>
<tr>
    <td><input type="text" onblur="getReturns();"></td>
    <td><input type="text" onblur="getReturns();"></td>
</tr>
</table>
</body>
</html>
IDs mussen laut SelfHTML mit einem Buchstaben beginnen. Ich habe das Präfix col_ ergänzt.
Ausserdem habe ich die Variable cookie in blnCookie abgeändert, da cookie in JS bereits verwendet wird.
Den Block zum Entfernen der Links habe ich abgeändert.
Den DIV-Container für die Links habe ich durch eine unsortierte Liste ersetzt.

Ciao
Quaese
 
Hi Quaese,

vielen Dank für deine Mühe! Das Script an sich funktioniert wunderbar, nur leider nicht in meinem Kontext. Jetzt weiß ich aber sicher das es nicht am Script liegen kann sondern ein anderes Problem sein muss. Wahrscheinlich hängt das mit dem ganzen Ajax-Geraffel hier zusammen. Ich schau mal weiter.

Ok, es liegt eindeutig am Ajax. Hab jetzt mal dein Beispiel Quaese zu Ajax umfunktioniert und es geht nicht mehr. Lässt man zu dass das Alert() ausgeführt wird, gehts es wieder. Gibts dafür eine logische erklärung?

Start:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>www.tutorials.de</title>
<script src="include/lib/prototype.js" type="text/javascript"></script>
<script src="include/src/scriptaculous.js" type="text/javascript"></script>
<script type="text/javascript">
  <!--
function getReturns() {
	get();
	//alert("jetzt gehts");
	getHidden();
}

function get() {
new Ajax.Updater('results', 'spaltenausblenden.asp');
}

function hideColumn (colIndex) {
  var table = document.all ? document.all.aTable :
              document.getElementById('aTable');
  for (var r = 0; r < table.rows.length; r++)
	  try {
	    table.rows[r].cells[colIndex].style.display = 'none';
	  }catch (e) {}
  // Präfix für ZellenIDs zugefügt
  addToHidden(document.getElementById("col_"+colIndex).innerHTML, colIndex);
  set_cookie(colIndex,'true',2);
}

function getHidden() {
    // cookie durch blnCookie ersetzt
    for(k=0;k<10;k++) {
   		blnCookie = get_cookie(k);
		//alert(blnCookie);
   		if (blnCookie == "true") {
   			hideColumn(k);
   		}
    }
}

function showColumn (colIndex) {
  var table = document.all ? document.all.aTable :
              document.getElementById('aTable');
  for (var r = 0; r < table.rows.length; r++)
    try {
    	table.rows[r].cells[colIndex].style.display = '';
    }catch (e){}

  // Link entfernen
  document.getElementById("hiddenColumns").removeChild(document.getElementById("li_hidden_"+colIndex));

	set_cookie(colIndex,'false',2);
}

function addToHidden (text, id) {
	newLI = document.createElement("li");

	ID = id;
	newID = "hidden_"+id;
	newLI_ID= "li_hidden_"+id;
	newLI.setAttribute('id', newLI_ID);
	newA = document.createElement("a");
	newA.setAttribute('id', newID);
	newA.setAttribute('href', 'javascript:showColumn('+ID+')');

	newTXT = document.createTextNode(text);
	document.getElementById('hiddenColumns').appendChild(newLI).appendChild(newA).appendChild(newTXT);
}

function get_cookie( cookieName )
{
    strValue = false;

    if( strCookie = document.cookie )
        {
            if( arrCookie = strCookie.match( new RegExp( cookieName + '=([^;]*)', 'g')))
                {
                    strValue=RegExp.$1;
                }
        }
    return(strValue);
}

function set_cookie(cookieName,cookieValue,intDays)
{
    if(!is_cookie_enabled())
        {
            return false;
        }

    objNow = new Date();
    strExp = new Date( objNow.getTime() + ( intDays * 86400000) );
    document.cookie = cookieName + '=' +
                      cookieValue + ';expires=' +
                      strExp.toGMTString() + ';';
    return true;
}

function delete_cookie(cookieName)
{
    if(document.cookie)
        {
            document.cookie = cookieName + '=' +
                              get_cookie(cookieName) +
                              ';expires=Thu, 01-Jan-1970 00:00:01 GMT;';
            return true;
        }
    return false;
}

function is_cookie_enabled()
{
    if(typeof navigator.cookieEnabled!='undefined')
        {
            return navigator.cookieEnabled;
        }

    set_cookie('testcookie','testwert',1);

    if(!document.cookie)
        {
            return false;
        }

    delete_cookie('testcookie');
    return true;
}

// Nach dem Laden die Tabelle und Links anpassen
window.onload = getReturns;
 //-->
</script>
</head>
<body>
<div id="results">
</div>
</body>
</html>

Datei die von Ajax eingebunden wird:
HTML:
<ul id="hiddenColumns" >
</ul>
<table id="aTable" style="background: #666;">
    <tr>
    <td id="col_0" onclick="hideColumn(0);" class="tableHead">
    Model
    </td>
    <td id="col_1" onclick="hideColumn(1);" class="tableHead">
    Serial#
    </td>
</tr>
<tr>
    <td><input type="text" onblur="getReturns();"></td>
    <td><input type="text" onblur="getReturns();"></td>
</tr>
</table>
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück