Zur Navigation

Alle Checkboxen markieren [3]

21 Jörg

Auch das sollte so funktionieren. Wie sind denn die input Felder im Formular und der Tabelle genau angeordnet?

21.10.2008 15:37

22 andyd

das ist der Kern meiner tabelle:
while ($row = mysql_fetch_array($result)) {

      echo "<tr bgcolor='#FFFFFF' id='auswahl'>";
      echo "<td><input type='checkbox' name='cb_auswahl[]' value='$id' onclick='markRow(this)'></td>";
      echo "<td><a href='$grpfad' target='_new' name='show' title='Anzeigen' <img src='b_search.png' border='0'></a></td>";
      echo "<td><a href='bemerkung.php?id=$id' onclick='FensterOeffnen(this.href); return false' name='edit' title='Bemerkung'><img src='b_edit.png' border=''></a></td>";
      echo "<td><a onclick=\"return confirm('Wirklich löschen?');\" href='admin.php?action=del&amp;id=$id' title='Löschen'><img src='b_drop.png' border=''></a></td>";
      echo "<td align='center'>$lf</td>";
      echo "<td width='100'>$grnr</td>";
      echo "<td width='300'>$grpfad</td>";
      echo "<td width='150'>$grdate</td>";
      echo "<td width='150'>$bemerkung</td></tr>";
   }}
      echo "<tr><td colspan='0'><img src='arrow_ltr.png' alt='' border='0' width='' height=''><input type='checkbox' name='checkall' value='1' onclick='test(this.checked)' />alle markieren</td></tr> ";

21.10.2008 15:50

23 Jörg

Ah, ich verstehe. Ich hätte die gesamte Tabelle eingefärbt - das hätte man mit einer ID machen können. Man kann eine ID nur einmal vergeben, deswegen kann man auf diese Weise nicht mehrere Tabellenzeilen einfärben

echo "<tr bgcolor='#FFFFFF' id='auswahl'>";

Hier wäre die Verwendung einer Klasse angebracht. Allerdings gibt es in JavaScript leider keine analoge Funktion getElementsByClass() - was die Sache etwas schwieriger macht...

Probier's mal so, das könnte vielleicht funktionieren:

function test(state){
    var checkboxes=document.getElementsByName('cb_auswahl[]');
    for(var n=0;n<checkboxes.length;n++){
        checkboxes[n].checked=state;
    }
    var allPageTags = document.getElementsByTagName("*");
    for (i = 0; i < allPageTags.length; i++) {
        if (allPageTags[i].className == "auswahl") {
            if (state == true) {
                allPageTags[i].style.backgroundColor = "#FDDB95";
            } else {
                allPageTags[i].style.backgroundColor = "#FFFFFF";
            }
        }
    }
}

Die Tabellenreihen müssen hierbei mit der Klasse "auswahl" ausgezeichnet werden, nicht mit der ID

echo "<tr bgcolor='#FFFFFF' class='auswahl'>";

21.10.2008 16:11 | geändert: 21.10.2008 16:15

24 andyd

hey super das funktioniert!!!

nur leider funktioniert jetz danach mein tr:hover.... in meiner css datei nicht mehr...

kann mann das noch irgendwie beheben?


vielen dank!!!!

21.10.2008 16:23

25 Jörg

JavaScript backgroundColor überschriebt hier wohl CSS background-color. In dem Fall müsstet du den Hover-Effekt mit einer zweiten JavaScript-Funktion erzeugen (bei onmouseover), das sollte dann funktionieren.

21.10.2008 16:37

26 andyd

Super Danke du hast mir sehr geholfen!!!

Nur das letztere geht noch nicht ganz....

folgenden code habe ich mir gedacht, macht allerdings noch nicht das was er soll ;)

wird bei <tr onmouseout=mouseOut(this) aufgerufen!


       function mouseOut(element){
       if(element.style.backgroundColor = '#FDDB95'){
       element.style.backgroundColor = '#FDDB95';
       }
       if(element.style.backgroundColor = '#FFFFFF'){
       element.style.backgroundColor = '#FFFFFF';
       }
}

zur erklärung:

Bei onmouseover ändere ich die farbe in ein grün ok und bei onmouseout soll jetz erst gebrüft werden, welche farbe die tabellenzeile hat...entweder weiß(#FFFFFF) oder orange(#FDDB95)!
wenn weiß dann soll sie bei onmouseout wieder weiß werden und wenn orange dann wieder orange!!

Ich hoffe ich konnte es einigermaßen verständlich rüberbringen....

DankeDankeDAnke

21.10.2008 17:19

27 andyd

oder anders gesagt...

wenn die checkbox aktiv ist soll bei onmouseout die tabellenzeile wieder orange werden und wenn die checkbox nicht aktiv dann soll sie weiß werden...

21.10.2008 17:54

28 Jörg

Die Checkbox ist das "Enkelkind" der Tabellenzeile. Die jeweils ersten Kindknoten können über firstChild angesprochen werden. Probier's mal so:

function mouseOut(element){
    if (element.firstChild.firstChild.checked == true){
        element.style.backgroundColor = '#FDDB95';
    } else {
        element.style.backgroundColor = '#FFFFFF';
    }
}

21.10.2008 18:08 | geändert: 21.10.2008 18:10

29 andyd

oh wahnsinn ich bin dir so dankbar!!!

Super!!!

21.10.2008 18:14

30 andi (Gast)

Hallo

Ich benutze auch diese checkall Funktion um dem Benutzer eine schnellere Auswahl zu ermöglichen. Das Formular gibt mir das ganze Array weiter (super), aber leider auch wenn eine Box vorher weggecheckt wird.

Wie kann ich dem Formular mitteilen, dass durch das unchecken eines Häckchens, nun doch nicht alle ausgewählt wurden?

04.12.2008 12:41