JavaScript Checkbox um Zeile zu "löschen"

wiked

Ensign
Registriert
Juni 2008
Beiträge
135
Guten morgen liebe CB-Gemeinde,

ich hänge gerade an einem blöden Problem. Und zwar habe ich eine Tabelle mit 20 Zeilen, wo nur die erste sichtbar ist, da die anderen durch style="display: none;" versteckt werden. Nun habe ich eine Button der beim klicken immer eine Zeile sichtbar macht:

Code:
var lastId = 2;
function showHiddenRows () {
  if ( lastId <= 20 ) {
    document.getElementById(lastId).style.display = '';
    lastId++;
  }
}

Dieser funktioniert auch soweit! Nun habe ich in jeder Tabellenzeile eine Checkbox. Nun will einen Button haben, der überprüft welche Checkbox angewählt ist und dann diese Zeilen entsprechend löscht... hoffe ich hab mich verständlich ausgedrückt...

Mein bisheriger Ansatz ist, dieserhier. Aber da tut sich leider gar nichts :(

Code:
function hideRow() {
  var x = document.getElementsByTagName('tr')
  for(var i=0; i<x.length; i++){
     if(document.getElementsByName('hide')[0].checked==true){
	 	x[i].style.display = 'none';
	 }
  }
}

Danke schonmal für die Hilfe!
 
Der Ansatz ist schonmal ganz gut, zumindest kann ich keine direkten Fehler feststellen.

Meine Vermutung warum sich nichts tut ist, dass er keine Checkboxen findet, die du aufrufst und deshalb die forschleife nicht durchläuft.

Um das zu testen würde ich einfach mal folgenden Code probieren, um Ausgaben mit Alerts zu bekommen und zu sehen, welche Checkbox angesprochen wird und ob die Abfrage nach dem Checked-Status funktioniert:

Code:
function hideRow() {
  var x = document.getElementsByTagName('tr')
  for(var i=0; i<x.length; i++){
     if(document.getElementsByName('hide')[0].checked==true){
	 	x[i].style.display = 'none';
                alert(i + 'yes');
	 } else {
                alert(i + 'no');
         }
  }
}

Wenn dann überhaupt keine Messagebox erscheint, weißt du das keine der Checkboxen angesprochen wird und dann warscheinlich der Fehler/ das Problem in dem Aufruf aller Checkboxen liegt. ;)

MfG, DM.
 
Okay.. gleich mal getestet. Er schreibt 0yes (wenn ich die erste auswähle) dann immer ziffer+no. Und es verschwinden alle Zeilen und nicht nur die ausgewählten. Also dürfte er die Checkboxen finden.

Kann das Problem nicht daran liegen, dass jede Checkbox in jeder Zeile name="hide" heißt, da diese per php erzeugt werden? Soll ich jede anders nennen also hide1-20. Aber wie überprüfe ich dann die Checkboxen :freak:
 
Und schon haben wir das Problem, der Name. Das bedeutet letztendlich das er die Checkbox löscht, die immer den gleichen Namen hat und das sind bei dir anscheinend alle.

Bastel in dem Fall die Checkboxen in ein Array aus Checkboxen, das geht dann mit name="hide[]" zB ;), dann sollte man auch per Javascript über den namen hide zugreifen können. In PHP hat man dann auch über $_POST['hide'] ein Array ;)

MfG, DM.
 
Ahaaa... jetzt hast mich erwischt... versteh nur Bahnhof :eek: also ich weiß was ein Array ist und wie ich eins erstell! Aber das was du da schreibst versteh ich nicht XD. Meine Tabelle schaut so aus:

PHP:
for ($a=2; $a<=20; $a++){
  	  echo '<tr valign="top" id="'.$a.'" style="display: none;">';
  	  echo '<td>'; 
      $handle = fopen ("Testplan.csv","r");
      fgets($handle);     // Erste Zeile überlesen
      $data = fgetcsv($handle, 30000, ';');
      echo '<select name="pname'.$a.'">'; 
      echo '<option selected></option>';
	  foreach ($data as $var){ 
        echo "<option value='$var'>$var</option>";
      } 
      fclose ($handle); 
  echo '</select>'; 
  echo '<td><input type="text" name="pwert'.$a.'"></input></td>';
  echo '<td><input type="checkbox" name="hide"></input></td>';
  echo '</tr>';
  }

Wo muss da jetzt was hin :freak:
 
Wenn ich das jetzt richtig sehe, dann muss jede Checkbox ne genaue Zuordnung bekommen, d.h. über $a, also sähe das dann so aus:

PHP:
for ($a=2; $a<=20; $a++){
        echo '<tr valign="top" id="'.$a.'" style="display: none;">';
        echo '<td>'; 
      $handle = fopen ("Testplan.csv","r");
      fgets($handle);     // Erste Zeile überlesen
      $data = fgetcsv($handle, 30000, ';');
      echo '<select name="pname'.$a.'">'; 
      echo '<option selected></option>';
      foreach ($data as $var){ 
        echo "<option value='$var'>$var</option>";
      } 
      fclose ($handle); 
  echo '</select>'; 
  echo '<td><input type="text" name="pwert'.$a.'"></input></td>';
  echo '<td><input type="checkbox" name="hide['.$a.']"></input></td>';
  echo '</tr>';
  }

Vorher hießen die doch alle hide, d.h. JS weiß nicht welches genau er jetzt hiden soll und nimm einfach alle, weil sie ja alle gleich heißen...
Dann kannst du in Javascript alle hide[a] durchlaufen und sie einzeln nach ihrer id fragen, um zu wissen welche er hiden soll!

MfG, DM.
 
Ahh ja klar! Super danke funktioniert :)
 
Mhh irgendwie funktioniert da was doch nicht...

Code:
function hideRow() {
  var x = document.getElementsByTagName('tr');
  for (var a=2; a<x.length;a++){
         for (var i=0; i<x.length; i++){
                if(document.getElementsByName('hide[a]')[0].checked==true){
	 	    x[i].style.display = 'none';
                }
         }
  }
}

Die php is genauso wie dus geschrieben hast!
 
Zuletzt bearbeitet:
Mhh weiß keiner Rat :heul:
 
Zurück
Oben