Zur Navigation

Tabelle sortieren [6]

51 Jörg Kruse

groessterWert is not defined

Kommt als Variable in dem Code auch nicht vor - oder beinhaltete die Fehlermeldung "groessterGesamtwert"?

Da fehlt ein Semikolon am Ende:

var groessterGesamtwert = Unsortiert[0][5]

26.08.2010 11:57

52 Jerry02

nein in der fehlermeldung steht groessterWert is not defined?
wie integriere ich da die variable in den code?

26.08.2010 12:03

53 Jörg Kruse

nein in der fehlermeldung steht groessterWert is not defined?

Dann solltest du noch den Codeabschnitt posten, auf den sich die Fehlermeldung bezieht

26.08.2010 12:39

54 Jerry02

also ich denke, dass sich der fehler auf diesen teil bezieht:

function groessterWert (Spalte)

    {
        var Anzahl = document.getElementById("Tabelle2").childNodes.length;
        Unsortiert = new Array();
        for (i = 0; i < Anzahl; i++) {
            Unsortiert[i] = new Array();
            Unsortiert[i]['Inhalt'] = document.getElementById("Tabelle2").childNodes[i];
            Unsortiert[i]['Wert'] = document.getElementById("Tabelle2").childNodes[i].childNodes[Spalte].innerHTML;
        }
        Unsortiert.sort(Sortierung);
        Unsortiert.reverse();
		var groessterName = Unsortiert[0][1];
		var groessterGesamtwert = Unsortiert[0][5];
        alert (Größte Position: + groessterName + "mit" + groessterGesamtwert + "Euro");
        }
    }

das programm fängt sozusagen garnicht erst an etwas zu machen, sondern bringt nur den genannten fehler! und ich weiss nicht warum!?

26.08.2010 13:36

55 Jörg Kruse

Gibt Firebug keine Zeile an, auf welcher sich der Fehler bezieht? Wo rufst du die Funktion denn auf?

Ansonsten finden sich noch zwei Syntax-Fehler in der Funktionsdefinition: eine Klammer ist zuviel und der erste String in alert() muss noch in Anführungszeichen gesetzt werden

26.08.2010 13:55

56 Jerry02

ok ich hab den fehler gefunden! ich habe das script nicht einfach oben zu den anderen scripts gemacht, sondern unten, wo es ausgegeben werden soll! allerdings geht es immer noch nicht! der prompt befehl wird ausgeführt und es wird auch was angezeigt: "Größte Position:undefinedmitundefinedEuro"

sieht so aus als ob er die zelle nicht auslesen kann...

achso in dem Link zum Sortieren staht folgendes:

<a href="#" onclick="groessterWert(5)">größter Wert</a>

vielleicht liegt es auch daran?
die 5 hab ich desswegen genommen, weil die spalte gesamtwert sortiert werden soll.

26.08.2010 14:06

57 Jörg Kruse

		var groessterName = Unsortiert[0][1];
		var groessterGesamtwert = Unsortiert[0][5];

Diese Array-Elemente gibt es auch nicht. Du musst schon die definierten Keys verwenden:

            Unsortiert[i]['Inhalt'] = document.getElementById("Tabelle2").childNodes[i];
            Unsortiert[i]['Wert'] = document.getElementById("Tabelle2").childNodes[i].childNodes[Spalte].innerHTML;

26.08.2010 14:26

58 Jerry02

stimmt! jetzt wird mir das als alert ausgegeben: Größte Position:[object HTMLTableRowElement]mit<p id="Gesamtwert1">81</p><a href="javascript:Aendern()"></a>Euro

du meintest das doch so:

function groessterWert (Spalte)

    {
        var Anzahl = document.getElementById("Tabelle2").childNodes.length;
        Unsortiert = new Array();
        for (i = 0; i < Anzahl; i++) {
            Unsortiert[i] = new Array();
            Unsortiert[i]['Inhalt'] = document.getElementById("Tabelle2").childNodes[i];
            Unsortiert[i]['Wert'] = document.getElementById("Tabelle2").childNodes[i].childNodes[Spalte].innerHTML;
        }
        Unsortiert.sort(Sortierung);
        Unsortiert.reverse();
		var groessterName = Unsortiert[0]['Inhalt'];
		var groessterGesamtwert = Unsortiert[0]['Wert'];
        alert ("Größte Position:" + groessterName + "mit" + groessterGesamtwert + "Euro");
}

26.08.2010 14:36

59 Jerry02

mhm...kannst du dir bitte nochmal die komplette seite ansehen! irgendwas stimmt da mächtig gewaltig nich ;)

<html>
<head>
<title>Portfolio Management System</title>

<script language="javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">


function Aendern ()
    {
        var newDate = new Date();
        var timestamp = newDate.getTime();
        var WKN = document.getElementById('WKN').value;
        var Kurs = document.getElementById('Kurs').value;
        var Name = document.getElementById('Name').value;
        var Stueck = document.getElementById('Stueck').value;
        var Kategorie = document.getElementById('Kategorie').value;
        var Gesamtwert = Stueck*Kurs;
        var Aktion = '<a href="javascript:Kursaendern(' + timestamp + ')">Kurs ändern</a>  <a href="javascript:Anzahlaendern(' + timestamp + ')">Anzahl ändern</a>  <a href="javascript:loeschen(' + timestamp + ')">löschen</a>';
        var newTR = document.createElement("tr");
        document.getElementById("Tabelle2").appendChild(newTR);
        document.getElementById("Tabelle2").lastChild.id="tr" + timestamp;
        var newTD1 = document.createElement("td");
        newTD1.innerHTML = '<p id="WKN1">' + WKN + '</p><a href="javascript:Aendern()"></a>';
        newTR.appendChild(newTD1);
        var newTD2 = document.createElement("td");
        newTD2.innerHTML = '<p id="Name1">' + Name + '</p><a href="javascript:Aendern()"></a>';
        newTR.appendChild(newTD2);
        var newTD3 = document.createElement("td");
        newTD3.innerHTML = '<p id="Kategorie1">' + Kategorie + '</p><a href="javascript:Aendern()"></a>';
        newTR.appendChild(newTD3);
        var newTD4 = document.createElement("td");
        newTD4.innerHTML = '<p id="Stueck1">' + Stueck + '</p><a href="javascript:Aendern()"></a>';
        newTR.appendChild(newTD4);
        var newTD5 = document.createElement("td");
        newTD5.innerHTML = '<p id="Kurs1">' + Kurs + '</p><a href="javascript:Aendern()"></a>';
        newTR.appendChild(newTD5);
        var newTD6 = document.createElement("td");
        newTD6.innerHTML = '<p id="Gesamtwert1">' + Gesamtwert + '</p><a href="javascript:Aendern()"></a>';
        newTR.appendChild(newTD6);
        var newTD7 = document.createElement("td");
        newTD7.innerHTML = '<p id="Aktion1">' + Aktion + '</p><a href="javascript:Aendern()"></a>';
        newTR.appendChild(newTD7);
        document.forms[0].reset();
        }

   
function Kursaendern (rowid)
    {
        var Kursaendern = prompt ("Geben Sie bitte den neuen Kurs ein.", "");
        var Kaendern = document.getElementById("tr" + rowid).childNodes[4];
        Kaendern.innerHTML = '<p id="Kurs1">' + Kursaendern + '</p><a href="javascript:Kursaendern(rowid)"></a>';
        var ZelleStueck = document.getElementById("tr" + rowid).childNodes[3].firstChild.innerHTML;
        var kGesamtwert = Kursaendern*ZelleStueck;
        var KUGesamtwert = document.getElementById("tr" + rowid).childNodes[5];
        KUGesamtwert.innerHTML = '<p id="Gesamtwert1">' + kGesamtwert + '</p><a href="javascript:Kursaendern(rowid)"></a>';
    }

function Anzahlaendern (rowid)
    {
        var Anzahlaendern = prompt ("Hier die neue Anzahl eingeben.", "");
        var AZaendern = document.getElementById("tr" + rowid).childNodes[3];
        AZaendern.innerHTML = '<p id="Stueck1">' + Anzahlaendern + '</p><a href="javascript:Anzahlaendern(rowid)"></a>';
        var ZelleKurs = document.getElementById("tr" + rowid).childNodes[4].firstChild.innerHTML;
        var aGesamtwert = ZelleKurs*Anzahlaendern;
        var AZGesamtwert = document.getElementById("tr" + rowid).childNodes[5];
        AZGesamtwert.innerHTML = '<p id="Gesamtwert1">' + aGesamtwert + '</p><a href="javascript:Anzahlaendern(rowid)"></a>';
    }
   
function loeschen (rowid)
   
    {
        var Loeschen = document.getElementById("tr" + rowid);
        document.getElementById("Tabelle2").removeChild(Loeschen);
    }

       
function Sortierung(a, b)
        {
            var tmp1 = parseInt( a['Wert'] );
			var tmp2 = parseInt( b['Wert'] );
			return tmp1 > tmp2 ? 1 :
            tmp1 < tmp2 ? -1 :
			a['Wert'] > b['Wert'] ? 1 :
			a['Wert'] < b['Wert'] ? -1 :
            0;
        }

       
function TabelleaufSortieren (Spalte)

    {
        var Anzahl = document.getElementById("Tabelle2").childNodes.length;
        Unsortiert = new Array();
        for (i = 0; i < Anzahl; i++) {
            Unsortiert[i] = new Array();
            Unsortiert[i]['Inhalt'] = document.getElementById("Tabelle2").childNodes[i];
            Unsortiert[i]['Wert'] = document.getElementById("Tabelle2").childNodes[i].childNodes[Spalte].innerHTML;
        }
        Unsortiert.sort(Sortierung);
       
        for (var i = 0; i < Anzahl; i++) {
        var Zeilenloeschen = document.getElementById("Tabelle2").childNodes[0];
            document.getElementById("Tabelle2").removeChild(Zeilenloeschen);
        }
        for (var i = 0; i < Anzahl; i++) {
        document.getElementById("Tabelle2").appendChild(Unsortiert[i]['Inhalt']);
        }
    }
    
function TabelleabSortieren (Spalte)

    {
        var Anzahl = document.getElementById("Tabelle2").childNodes.length;
        Unsortiert = new Array();
        for (i = 0; i < Anzahl; i++) {
            Unsortiert[i] = new Array();
            Unsortiert[i]['Inhalt'] = document.getElementById("Tabelle2").childNodes[i];
            Unsortiert[i]['Wert'] = document.getElementById("Tabelle2").childNodes[i].childNodes[Spalte].innerHTML;
        }
        Unsortiert.sort(Sortierung);
        Unsortiert.reverse();
       
        for (var i = 0; i < Anzahl; i++) {
        var Zeilenloeschen = document.getElementById("Tabelle2").childNodes[0];
            document.getElementById("Tabelle2").removeChild(Zeilenloeschen);
        }
        for (var i = 0; i < Anzahl; i++) {
        document.getElementById("Tabelle2").appendChild(Unsortiert[i]['Inhalt']);
        }
    }
	

function groessterWert (Spalte)

    {
        var Anzahl = document.getElementById("Tabelle2").childNodes.length;
        Unsortiert = new Array();
        for (i = 0; i < Anzahl; i++) {
            Unsortiert[i] = new Array();
            Unsortiert[i]['Inhalt'] = document.getElementById("Tabelle2").childNodes[i];
            Unsortiert[i]['Wert'] = document.getElementById("Tabelle2").childNodes[i].childNodes[Spalte].innerHTML;
        }
        Unsortiert.sort(Sortierung);
        Unsortiert.reverse();
		var groessterName = Unsortiert[0]['Inhalt'];
		var groessterGesamtwert = Unsortiert[0]['Wert'];
        alert ("Größte Position:" + groessterName + "mit" + groessterGesamtwert + "Euro");
        
    }
	
function kleinsterWert (Spalte)

    {
        var Anzahl = document.getElementById("Tabelle2").childNodes.length;
        Unsortiert = new Array();
        for (i = 0; i < Anzahl; i++) {
            Unsortiert[i] = new Array();
            Unsortiert[i]['Inhalt'] = document.getElementById("Tabelle2").childNodes[i];
            Unsortiert[i]['Wert'] = document.getElementById("Tabelle2").childNodes[i].childNodes[Spalte].innerHTML;
        }
        Unsortiert.sort(Sortierung);
		var kleinsterName = Unsortiert[0]['Inhalt'];
		var kleinsterGesamtwert = Unsortiert[0]['Wert'];
        alert ("Größte Position:" + kleinsterName + "mit" + kleinsterGesamtwert + "Euro"); 
    }
	
</script>

</head>
<body>


<h1>Portfolio Management System</h1>

<form name="Maske">
    <table id="Tabelle1" border="0" cellpadding="0" cellspacing="4">
        <tr>
            <th align="right">WKN:</th>
            <th><input name="WKN" type="text" size="30" maxlenth="30" id="WKN"></th>
            <th align="right">Kurs:</th>
            <th><input name="Kurs" type="text" size="30" maxlenth="30" id="Kurs"></th>
            <th align="left">Euro</th>
        </tr>
        <tr>
            <th align="right">Name:</th>
            <th><input name="Name" type="text" size="30" maxlenth="30" id="Name"></th>
            <th align="right">Stück:</th>
            <th><input name="Stueck" type="text" size="30" maxlenth="30" id="Stueck"></th>
        </tr>
        <tr>
            <th align="right">Kategorie:</th>
            <th><input name="Kategorie" type="text" size="30" maxlenth="30" id="Kategorie"></th>
            <th><input type="button" tabindex="2" value="hinzufügen" onClick="Aendern ();"></th>
        </tr>
    </table>
</form>
<br>
<br>
<br>
<table border="1">
    <thead><tr align="center" valign="middle">
        <td><b>WKN</b>&ensp;<a href="#" onclick="TabelleaufSortieren(0)"><img src="normal_auf.gif"></a>&ensp;<a href="#" onclick="TabelleabSortieren(0)"><img src="normal_ab.gif"></a></td>
        <td><b>Name</b>&ensp;<a href="#" onclick="TabelleaufSortieren(1)"><img src="normal_auf.gif"></a>&ensp;<a href="#" onclick="TabelleabSortieren(1)"><img src="normal_ab.gif"></a></td>
        <td><b>Kategorie</b>&ensp;<a href="#" onclick="TabelleaufSortieren(2)"><img src="normal_auf.gif"></a>&ensp;<a href="#" onclick="TabelleabSortieren(2)"><img src="normal_ab.gif"></a></td>
        <td><b>Anzahl</b>&ensp;<a href="#" onclick="TabelleaufSortieren(3)"><img src="normal_auf.gif"></a>&ensp;<a href="#" onclick="TabelleabSortieren(3)"><img src="normal_ab.gif"></a></td>
        <td><b>Kurs</b>&ensp;<a href="#" onclick="TabelleaufSortieren(4)"><img src="normal_auf.gif"></a>&ensp;<a href="#" onclick="TabelleabSortieren(4)"><img src="normal_ab.gif"></a></td>
        <td><b>Gesamtwert</b>&ensp;<a href="#" onclick="TabelleaufSortieren(5)"><img src="normal_auf.gif"></a>&ensp;<a href="#" onclick="TabelleabSortieren(5)"><img src="normal_ab.gif"></a></td>
        <td><b>Aktion</b></td>
    </tr></thead>
<tbody id="Tabelle2"></tbody></table>
<br>
<br>
<br>
<a href="#" onclick="groessterWert(5)">größter Wert</a>
<br>
<a href="#" onclick="kleinsterWert(5)">kleinster Wert</a>
<br>
<a href="#" onclick="durchschnittlicherWert(5)">durchschnittlicher Wert</a>


</body>
</html>
ich sag dir mal was ich eingegeben habe bei kurs + anzahl:

12
99
23
777
18000

die werte sind bei anzahl die selben! ist ja auch egal, aber wenn ich jetzt den kurs sortiere, dann gibt er mir das aus:

12
18000
23
99
777

wie kommt der bitte darauf?

Edit: Bei zwei Werten klappt es super, aber sobald es mehrere unsortierte sind wird es falsch :(

Edit2: ich hab es grad nochmal durchlaufen lassen und jetzt wird sogar die 777 noch vor der 99 ausgegeben! das ist echt komisch. läuft der sortieralgorithmus vielleicht zu kurz also müsste er vielleicht mehrmals durchlaufen?

26.08.2010 14:59 | geändert: 26.08.2010 15:24

60 Jörg Kruse

"Unsortiert[i]['Wert']" enthält wohl wesentlich mehr als die Zahl - da kann parseInt() dann auch nichts mit anfangen - und so wird der gesamte String im Endeffekt alphanumerisch sortiert. Da musst du wohl noch eine Ebene tiefer gehen, um die Zahl zu extrahieren.

26.08.2010 15:35 | geändert: 26.08.2010 15:36