tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
408
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mychastic mychastic ist offline Mitglied Bronze
    Registriert seit
    Aug 2008
    Beiträge
    26
    Hallo ich habe ein Problem. Ich habe eine Tabelle mit mehren Einträgen und für jeden Eintrag
    gibt es eine Checkbox, die bei anklicken ein Textfeld hinter der Checkbox öffnet. Allerdings öffnet sich diese Textfeld immer nur hinter dem ersten Eintrag, egal auf welche Checkbox ich klicke

    Quelcode sieht wie folgt aus:
    HTML-Code:
    	<table>
    	<form method=POST name="addArticle" action={$SCRIPT_NAME}>
    	<input type="hidden" name="action" value="addStorage">
    	<tr>
    		<td class="artikelkopf4">Artkelname</td>
    		<td class="artikelkopf6">Einlagern</td>
    		<td class="artikelkopf6">Serial eingeben</td>
    	</tr>
    	
    	{section name="amount" loop=$arrival[0].amount}
    	
    	<tr>
    		<td>{$article.name}</td>
    		<td><input type="checkbox"name="storage"></td>
                    <td><input type="checkbox" id="serial" name="serial" onchange="modifyField(this)">
                    <input type="hidden" id="inputserial" name="inputserial" size="15"</td>		
    	</tr>
    
    	{/section}
    	
    	</table>
     

  2. #2
    OnlyFoo OnlyFoo ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    470
    zeig uns doch noch modifyField
    und lösch das id="..." soweit ich sehe ist das eine schleife, die mehrere Tabellenzeilen generiert... und jede zeile kriegt die selben ids... aber ne id darf nur einmal vorkommen...
    und beim Textfeld fehlt ein >
     

  3. #3
    mychastic mychastic ist offline Mitglied Bronze
    Registriert seit
    Aug 2008
    Beiträge
    26
    Stimmt, das mit der id macht Sinn
    Aber wie kann ich das umgehen? Hab noch nicht viel mit Javascript gearbeitet

    Die JS sieht so aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    function modifyField(objCheckbox){
      if(objCheckbox.checked){
       document.getElementById('inputserial').type = "text";
      }else{
        document.getElementById('inputserial').type = "hidden";
      }
    }
     

  4. #4
    mychastic mychastic ist offline Mitglied Bronze
    Registriert seit
    Aug 2008
    Beiträge
    26
    Habe das ganze jetzt etwas abgeändert.

    HTML-Code:
    	<table>
    	<form method=POST name="addStorage" action={$SCRIPT_NAME}>
    	<input type="hidden" name="action" value="addStorage">
    	<tr>
    		<td class="artikelkopf5">blub</td>
    		<td class="artikelkopf4">Artkelname</td>
    		<td class="artikelkopf6">Einlagern</td>
    		<td class="artikelkopf6">Serial eingeben</td>
    	</tr>
    	
    	{section name="amount" start="0" loop=$arrival[0].amount}
    
    	<tr>	
    		<td>{counter}</td>
    		<td>{$article.name}</td>
    		<td><input type="checkbox" name="storage"></td>
    		<td><input type="checkbox" name="serial" onChange="modifyField(this)"><input type="hidden" name="inputserial" size="15"</td>	
    	</tr>
    	
    	{/section}
    	
    	</table>

    Durch den Counter bekomme ich nun vor jedem Eintrag eine Zahl ausgegeben (1-5) wenn es 5 Artikel sind. Jeder Artikel erhält nun so auch eine Checkbox (eigentlich 2, aber nur die "serial" ist relevant). Kann ich nun durch den Counter jeder Checkbox eine eindeutige ID zuweisen oder kann ich das auch anders lösen?
    Geändert von mychastic (17.09.08 um 10:38 Uhr)
     

  5. #5
    OnlyFoo OnlyFoo ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    470
    wenn du schon {counter} hast, dann weiß denen doch ne eindeutige id alla: id='bla_{counter} zu. dann kannste mit modifyBla( '{counter}' ) und dann document.getElementById( "bla_" + argument0 ).machWas() die elemente ansprechen
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Eigentlich brauchst du es garnicht unnötig komplizieren.
    Das anzuzeigende Feld ist das letzte Element der <td> mit der dazugehörigen Checkbox, ideal um darauf zuzugreifen

    Da der IE aber seine Probleme mit der type-Eigenschaft hat, würde ich das eher über style-display machen.
    Und da der IE onchange erst nach onblur der Checkbox feuert, per onclick.
    Code :
    1
    2
    3
    4
    
    function modifyField(objCheckbox)
    {
      objCheckbox.[B]parentNode.lastChild[/B].style.display=(objCheckbox.checked)?'inline':'none';
    }

    ....
    Code :
    1
    2
    
    <td><input type="checkbox" id="serial" name="serial" [B]onclick[/B]="modifyField(this)">
                    <input type="[B]text[/B]" [B]style="display:none"[/B] id="inputserial" name="inputserial" size="15"></td>
     

  7. #7
    mychastic mychastic ist offline Mitglied Bronze
    Registriert seit
    Aug 2008
    Beiträge
    26
    Ein dickes Dankeschön an Sven!!

    /erledigt
     

  8. #8
    mychastic mychastic ist offline Mitglied Bronze
    Registriert seit
    Aug 2008
    Beiträge
    26
    Wobei eine kleine Frage hätte ich dann noch

    Ich kann nun jedes Feld an der richtigen Stelle aktivieren und deaktivieren. Wie spreche ich nun die einzelnen Felder an, wenn ich da eine Eingabe gemacht habe? Also letztendlich möchte ich für die Artikel optional eine Serial angeben können(durch diese aktivierbaren Eingabefelder) und diese dann per 1 Submit in einer Datenbanktabelle speichern/updaten.
     

  9. #9
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    du müsstest das name-Attribut aller mehrfach vorkommenden Formularfelder um eckige Klammern erweitern, also ca. so:
    Code :
    1
    2
    
    <td><input type="checkbox" id="serial" name="serial[B][][/B]" onclick="modifyField(this)">
                    <input type="text" style="display:none" id="inputserial" name="inputserial[B][][/B]" size="15"></td>

    Dann wird aus gleichnamigen Elementen ein Array übermittelt, den du über die entsprechenden Array-Methoden verarbeiten kannst.

    Lasse dir dann einfach mal alles gesendete per
    Code :
    1
    
    echo '<pre>'.print_r($_POST,true).'</pre>';
    ...ausgeben, dann siehst du, wie alles aufgebaut ist
     

  10. #10
    mychastic mychastic ist offline Mitglied Bronze
    Registriert seit
    Aug 2008
    Beiträge
    26
    Vielen Dank! Klappt wunderbar!
     

Ähnliche Themen

  1. JSF - Welcher commandButton wurde geklickt?
    Von derStephan im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 10.11.09, 17:47
  2. Abfrage, welche PictureBox geklickt wurde
    Von Rockstady11 im Forum .NET Windows Forms
    Antworten: 29
    Letzter Beitrag: 30.07.09, 22:49
  3. Bestimmte Seite sperren bis der Banner geklickt wurde
    Von TS7 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 18.03.09, 13:50
  4. Antworten: 9
    Letzter Beitrag: 31.07.05, 10:27
  5. Caption aus Programm auslesen in das geklickt wurde
    Von stimon im Forum Borland CBuilder und VCL
    Antworten: 6
    Letzter Beitrag: 19.07.05, 20:22