mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 01:56 Benutzername: Passwort: Auto-Login

Thema: [Javascript] Inputfelder hinzufügen / entfernen vom 07.09.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [Javascript] Inputfelder hinzufügen / entfernen
Seite: Zurück  1, 2, 3, 4  Weiter
Autor Nachricht
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 11:34
Titel

Antworten mit Zitat Zum Seitenanfang

Also erstmal wird es so wie du es momentan gelöst hast nicht funktionieren. Um dir
dass zu verdeutlichen teste einfach mal das hier:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Zeussi</title>
<script type="text/javascript">
<!--

   var count_1 = 0;
   var count_2 = 0;

   function clone_1(obj)
   {
      if(count_1 == 4) return;
      var tmpNode = obj.parentNode.getElementsByTagName('div')[0].cloneNode(true);
      tmpNode.getElementsByTagName('a')[0].style.display = 'inline';
      var tmpElm = document.createElement('input');
      tmpElm.type = tmpNode.getElementsByTagName('input')[0].type;
      tmpElm.name = tmpNode.getElementsByTagName('input')[0].name;
      tmpNode.replaceChild(tmpElm,tmpNode.getElementsByTagName('input')[0]);
      obj.parentNode.insertBefore(tmpNode,obj);
      count_1++;

   }

   function remove_this_1(obj)
   {
        obj.parentNode.removeChild(obj);
      count_1--;
   }
   
   function clone_2(obj)
   {
      if(count_2 == 4) return;
      var tmpNode = obj.parentNode.getElementsByTagName('div')[0].cloneNode(true);
      tmpNode.getElementsByTagName('a')[0].style.display = 'inline';
      var tmpElm = document.createElement('input');
      tmpElm.type = tmpNode.getElementsByTagName('input')[0].type;
      tmpElm.name = tmpNode.getElementsByTagName('input')[0].name;
      tmpNode.replaceChild(tmpElm,tmpNode.getElementsByTagName('input')[0]);
      obj.parentNode.insertBefore(tmpNode,obj);
      count_2++;

   }

   function remove_this_2(obj)
   {
        obj.parentNode.removeChild(obj);
      count_2--;
   }

//-->
</script>
</head>
<body>
<form method="" action="" id="test">
 <div>
  <label>E-Mail: </label><input name="textfeldname[]" type="text" />
  <a href="#" onclick="remove_this_1(parentNode)" style="display: none; ">löschen</a>
 </div>
 <a href="#" onclick="clone_1(this)">noch eins</a>
 
  <div>
  <label>E-Mail: </label><input name="textfeldname2[]" type="text" />
  <a href="#" onclick="remove_this_2(parentNode)" style="display: none; ">löschen</a>
 </div>
 <a href="#" onclick="clone_2(this)">noch eins</a>
</form>
</body>
</html>


Du klonst nämlich immer nur dass erste Div Element innerhalb des Formulares und fügst
dieses dann wieder ein.


Code:
var tmpNode = obj.parentNode.getElementsByTagName('div')[0].cloneNode(true);




Allerdings macht dass so für mich auch immer noch keinen Sinn, ist dass der endgültige
Quelltext der zum Einsatz kommen wird?- sicher nicht? Und ohne den zu sehen kann man
dir so auch nicht weiterhelfen außer auf ne Doku zu verweisen. Du hast also mehrere Div
Elemente in einem Formular soweit ist es klar, aber was enthalten diese?- alle die selben
Elemente? Also, bereite mal dein Formular soweit vor, ansonsten ist es eben einfach nicht
möglich dir zu sagen wie du vorgehen könntest.

Achso, in Opera läuft es bei mir bestens.


Zuletzt bearbeitet von m am So 09.09.2007 11:38, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Zeussi
Threadersteller

Dabei seit: 13.07.2007
Ort: München - Freising
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 11:42
Titel

Antworten mit Zitat Zum Seitenanfang

Ja, schon klar. das ganze füge ich dann einem PHP-Dokument hinzu.

Ich denke nicht, dass du den ganzen Quellcode dafür sehen willst, bisschen unübersichtlich und man versteht auch nicht mehr.

Ich füge gleich den Quellcode hinzu, so wie ich mir das ganze in Verbindung mit dem Javascript-Code vorstelle.
Dann hoffe ich, verstehst du denn Sinn, was ich bezwecken möchte Lächel
  View user's profile Private Nachricht senden
Anzeige
Anzeige
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 11:46
Titel

Antworten mit Zitat Zum Seitenanfang

Zeussi hat geschrieben:
Ja, schon klar. das ganze füge ich dann einem PHP-Dokument hinzu.

Ich denke nicht, dass du den ganzen Quellcode dafür sehen willst, bisschen unübersichtlich und man versteht auch nicht mehr.

Ich füge gleich den Quellcode hinzu, so wie ich mir das ganze in Verbindung mit dem Javascript-Code vorstelle.
Dann hoffe ich, verstehst du denn Sinn, was ich bezwecken möchte Lächel


Kein PHP, nur den generierten Quelltext und natürlich nur den relevanten Bereich
also alles was sich zwischen den form tags befindet.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Zeussi
Threadersteller

Dabei seit: 13.07.2007
Ort: München - Freising
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 12:14
Titel

Antworten mit Zitat Zum Seitenanfang

An sich ist dein Script "der relevante Bereich".
Denn an sonsten befinden sich nur weitere Input-Felder zwischen dem Form, aber keine weiteren DIVs.
Auch die anderen Inputs sind außerhalb des DIVs, weshalb es zu keinen Komplikationen kommen sollte.

Teste es:
Klicke bei beiden DIVs so oft es geht drauf. Gut. Es geht. Bei beiden maximal 5 Inputs.
Löscht du aber nun bei DIV Nr. 2 ein Input, kannst du es bei Div Nr. 1 hinzufügen und bei Div Nr. 2 NICHT mehr.
Sprich, bei einem sind es 6, beim anderen sind es 4. Das will ich ja nicht.

Ich hoffe, du weißt was ich meine Lächel

lG,
Stephan

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Zeussi</title>
<script type="text/javascript">
<!--

   var count_1 = 1;
   var count_2 = 1;

   function clone_1(obj)
   {
      if(count_1 == 5) return;
      var tmpNode = obj.parentNode.getElementsByTagName('div')[0].cloneNode(true);
      tmpNode.getElementsByTagName('a')[0].style.display = 'inline';
      var tmpElm = document.createElement('input');
      tmpElm.type = tmpNode.getElementsByTagName('input')[0].type;
      tmpElm.name = '1_div_' + count_1;
      tmpNode.replaceChild(tmpElm,tmpNode.getElementsByTagName('input')[0]);
      obj.parentNode.insertBefore(tmpNode,obj);
      count_1++;

   }

   function remove_this_1(obj)
   {
        obj.parentNode.removeChild(obj);
      count_1--;
   }

   function clone_2(obj)
   {
      if(count_2 == 5) return;
      var tmpNode = obj.parentNode.getElementsByTagName('div')[0].cloneNode(true);
      tmpNode.getElementsByTagName('a')[0].style.display = 'inline';
      var tmpElm = document.createElement('input');
      tmpElm.type = tmpNode.getElementsByTagName('input')[0].type;
      tmpElm.name = '2_div_' + count_2;
      tmpNode.replaceChild(tmpElm,tmpNode.getElementsByTagName('input')[0]);
      obj.parentNode.insertBefore(tmpNode,obj);
      count_2++;

   }

   function remove_this_2(obj)
   {
        obj.parentNode.removeChild(obj);
      count_2--;
   }

//-->
</script>
</head>
<body>
<form method="" action="" id="test">
<br />
Maximal 5 Inputs bei DIV 1:
<br />
 <div id="1_div">
  <input name="1_div_0" type="text" />
  <a href="#" onclick="remove_this_1(parentNode)" style="display: none; ">l&ouml;schen</a>
 </div>
 <a href="#" onclick="clone_1(this)">noch eins</a>
<br />
Maximal 5 Inputs  bei DIV 2:
<br />
  <div id="2_div">
  <input name="2_div_0" type="text" />
  <a href="#" onclick="remove_this_2(parentNode)" style="display: none; ">l&ouml;schen</a>
 </div>
 <a href="#" onclick="clone_2(this)">noch eins</a>
</form>
</body>
</html>


Zuletzt bearbeitet von Zeussi am So 09.09.2007 12:16, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 12:26
Titel

Antworten mit Zitat Zum Seitenanfang

Hängt mit dem Problem zusammen welches ich in meinem letzten Post
angesprochen habe. Spreche in deinen Funktionen das richtige Div Element
an und dann sollte dass auch funktionieren.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Zeussi
Threadersteller

Dabei seit: 13.07.2007
Ort: München - Freising
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 12:31
Titel

Antworten mit Zitat Zum Seitenanfang

Aber wie spreche ich das andere an?

wenn ich das [0] in [1] ändere, passiert ja nichts. deswegen habe ich es nicht verstanden, sorry :/
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 12:36
Titel

Antworten mit Zitat Zum Seitenanfang

Zeussi hat geschrieben:
Aber wie spreche ich das andere an?

wenn ich das [0] in [1] ändere, passiert ja nichts. deswegen habe ich es nicht verstanden, sorry :/


Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Zeussi</title>
<script type="text/javascript">
<!--

   var count_1 = 1;
   var count_2 = 1;

   function clone_1(obj)
   {
      if(count_1 == 5) return;
      var tmpNode = obj.parentNode.getElementsByTagName('div')[0].cloneNode(true);
      tmpNode.getElementsByTagName('a')[0].style.display = 'inline';
      var tmpElm = document.createElement('input');
      tmpElm.type = tmpNode.getElementsByTagName('input')[0].type;
      tmpElm.name = '1_div_' + count_1;
      tmpNode.replaceChild(tmpElm,tmpNode.getElementsByTagName('input')[0]);
      obj.parentNode.insertBefore(tmpNode,obj);
      count_1++;

   }

   function remove_this_1(obj)
   {
        obj.parentNode.removeChild(obj);
      count_1--;
   }

   function clone_2(obj)
   {
      if(count_2 == 5) return;
      var tmpNode = obj.parentNode.getElementsByTagName('div')[count_1].cloneNode(true);
      tmpNode.getElementsByTagName('a')[0].style.display = 'inline';
      var tmpElm = document.createElement('input');
      tmpElm.type = tmpNode.getElementsByTagName('input')[0].type;
      tmpElm.name = '2_div_' + count_2;
      tmpNode.replaceChild(tmpElm,tmpNode.getElementsByTagName('input')[0]);
      obj.parentNode.insertBefore(tmpNode,obj);
      count_2++;

   }

   function remove_this_2(obj)
   {
        obj.parentNode.removeChild(obj);
      count_2--;
   }

//-->
</script>
</head>
<body>
<form method="" action="" id="test">
<br />
Maximal 5 Inputs bei DIV 1:
<br />
 <div id="1_div">
  <input name="1_div_0" type="text" />
  <a href="#" onclick="remove_this_1(parentNode)" style="display: none; color: #f00 ">l&ouml;schen</a>
 </div>
 <a href="#" onclick="clone_1(this)">noch eins</a>
<br />
Maximal 5 Inputs  bei DIV 2:
<br />
  <div id="2_div">
  <input name="2_div_0" type="text" />
  <a href="#" onclick="remove_this_2(parentNode)" style="display: none; color: #f0f">l&ouml;schen</a>
 </div>
 <a href="#" onclick="clone_2(this)">noch eins</a>
</form>
</body>
</html>
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Zeussi
Threadersteller

Dabei seit: 13.07.2007
Ort: München - Freising
Alter: -
Geschlecht: Männlich
Verfasst So 09.09.2007 12:45
Titel

Antworten mit Zitat Zum Seitenanfang

Ja, es funktioniert, das war mein Problem Lächel

Nur verstehe ich das jetzt überhaupt nicht?
Wieso hast du count_1 da rein gesetzt? Das hat doch gar keinen Zusammenhang? count_1 verändert sich, wenn man auf das erste DIV zugreift. Aber das erste DIV ist doch im Gebrauch unabhängig vom zweiten DIV? Javascript ist für mich ein Buch mit sieben Siegeln ....

...umso mehr bewundere ich es, dass es andere verstehen, nochmals vielen Dank * Applaus, Applaus *

//edit:
bei einem 3ten DIV dann anstatt count_1 das:
count_1+count_2 ?
das müsste es doch logischerweiße dann sein, aber verstehen tue ich das ganze dann immer noch nicht

//edit2:
ich habe es getestet, so funktioniert es auch mit 3 DIVs,
also zählt er immer alle inputfelder? dann hat es doch gar nichts mit dem div zutun? viel logischer wäre es doch, wenn man es über einen id-namen ansprechen würde, dann wäre alles 100% genau zugewießen

lG,
Stephan


Zuletzt bearbeitet von Zeussi am So 09.09.2007 13:03, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ähnliche Themen [Javascript] Multiple form upload / input felder hinzufügen
Splines bei 3Ds Max hinzufügen
Freehand -Punkte hinzufügen
Zum Home-Bildschirm hinzufügen
[TYPO3] RTE - Schriftgröße 9 pt hinzufügen?
Soundkanal im director hinzufügen?
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2, 3, 4  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.