tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
2551
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kesnw kesnw ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Beiträge
    338
    Hallo,

    habe ein großes (für euch vielleicht kleines) JS Problem. Ich habe eine Checkbox. Wenn man die anklickt soll eine Tabelle erscheinen. Das Formular sieht folgendermassen aus:

    HTML-Code:
    <form action="" method="" name="modules">
    <TABLE>
      <TR VALIGN="top">
        <TD ALIGN="left"><input type="checkbox" name="module1" value="module1" onClick="JavaScript:change();"></TD>
      </TR>
      <DIV id="mod1"></DIV>
    </TABLE>
    </form>
    Nun die Funktion change():

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function change()
    {
      var newTR = document.createElement("TR");
      document.getElementById("mod1").appendChild(newTR);
      var newTD = document.createElement("TD");
      document.getElementById("mod1").firstChild.appendChild(newTD);
      var td = document.getElementById("mod1").firstChild.firstChild;
      var newTDText = document.createTextElement("Hier steht ein Text in einer Tabelle!");
      td.appendChild(newTDText);
     
    }

    Leider erscheint ein JS Fehler beim Anklicken der Ckeckbox. Kann mir jemand helfen? Hab heut erst angefangen mich mit den Nodes zu beschäftigen und steig trotz SelfHTML noch nicht so ganz dahinter...

    Danke schonmal für jede Antwort!
    Geändert von kesnw (02.02.05 um 14:06 Uhr)
     

  2. #2
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    wie ich sehe, willst du eine neue Zeile in die bestehende Tabelle einhängen. Dazu musst du
    einen TBODY mit ID einfügen. An diesen kannst du mit der Methode appendChild() einen
    Zeilenknoten anhängen.

    HTML-Code:
    HTML-Code:
    <form action="" method="" name="modules">
    	<table>
      	<tbody id="tbodyID">
    	    <tr VALIGN="top">
    	      <td align="left">
    	        <input type="checkbox" name="module1" value="module1" onClick="javascript: appendTR();">
    	      </td>
    	    </tr>
        </tbody>
      </table>
    </form>
    Das zugehörige JavaScript:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    function appendTR(){
      // Neues Tabellenzeilen-Objekt erstellen
      var newTR = document.createElement("tr");
      // Neues Tabellenzellen-Objekt erstellen
      var newTD = document.createElement("td");
     
     
      // HTML einfügen
      newTD.innerHTML = "hallo welt";
      // Neue Tabellenzelle an Zeile "anhängen"
      newTR.appendChild(newTD);
     
      // Neue Zeile in Tabelle "einhängen"
      document.getElementById("tbodyID").appendChild(newTR);
    }
    Die createTextElement-Methode habe ich durch innerHTML ersetzt - ging schneller. Sollte
    aber in den gängigen Browsern funktionieren.

    Ich hoffe, das bringt dich weiter.

    Ciao
    Quaese
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  3. #3
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Weiterhin... es gibt keine Methode createTextElement()(in diesem Zusammenhang).... hast du bestimmt verwechselt mit createTextNode()
     

  4. #4
    kesnw kesnw ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Beiträge
    338
    Klasse, das sieht gut aus. Eine Frage hab ich aber noch.

    Meine Tabelle besteht bereits aus unzähligen Zeilen und ich möchte diese neue Zeile mittendrin einfügen. Wie ich das sehe wird bei deinem Script die Zeile ans Ende angehängt. Wie kann ich das realisieren. Meine Idee war eben das <div id="mod1"></div> genau an der Stelle wo die neue Zeile reinsoll...

    Danke nochmal!
     

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    z.B. per insertBefore()

    Das mit dem <div> kannst du eher vergessen... ein <div> hat dort mittendrin nix verloren, und darf auch kein <tr> enthalten.
     

  6. #6
    kesnw kesnw ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Beiträge
    338
    Super klasse, es funktioniert. Nun muss ich nur noch die erzeugten Zeilen (sind von variabler Länge) im <tbody> löschen wenn ich die Checkbox deaktiviere!

    Wie lösche ich den gesamten Baum in einem <tbody> element
     

  7. #7
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Am Einfachsten geht es, wenn du den einen neuen TBODY erzeugst, und den Vorhandenen damit per replaceChild() ersetzt.
     

Ähnliche Themen

  1. WPF Tabelle erzeugen wie DataGridView
    Von zer0 im Forum .NET WPF & Silverlight
    Antworten: 0
    Letzter Beitrag: 15.07.10, 13:40
  2. Tabelle aus Array erzeugen
    Von Spranta im Forum PHP
    Antworten: 3
    Letzter Beitrag: 10.07.08, 13:28
  3. in .sql Tabelle schreiben / erzeugen / MFC
    Von mats_MF im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 18.06.08, 19:42
  4. html Tabelle erzeugen
    Von hibbert im Forum PHP
    Antworten: 4
    Letzter Beitrag: 28.09.03, 22:44
  5. Tabelle dynamisch erzeugen
    Von Armageddon im Forum PHP
    Antworten: 7
    Letzter Beitrag: 11.08.03, 19:13