Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ausschreibungssprachen und clientseitige Programmierung > JavaScript und AJAX > Input-Felder mit JavaScript hinzufügen/entfernen
Antwort
 
Themen-Optionen
Alt 22.07.2008, 14:35   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard Input-Felder mit JavaScript hinzufügen/entfernen

Hi,
also ich habe aktuell das hier:

Code:
<script type="text/javascript">
	
function addUploadField(div_id) { 
  document.getElementById(div_id).innerHTML += '<input class="images" type="file" name="images[]" size="35" /><br />';
} 
</script>
Code:
<input type="file" name="images[]" size="35" />
<div id="upload_images"></div>
<a class="link" onClick="addUploadField('upload_images');">Weiteres Bild hochladen</a>
Klicke ich auf den Link, so wird ein neues Inputfeld hinzugefügt.
Nun würde ich gerne die Möglichkeit haben Felder auch wieder zu entfernen.

Ich habe das folgendermaßen versucht.
Code:
var count = 1;	

function addUploadField(div_id) { 
  document.getElementById(div_id).innerHTML += '<input id="' + count + '" class="images" type="file" name="images[]" size="35" />&nbsp; <a onClick="removeUploadField(\'upload_images\',' + count + ')">x</a><br />';
  count++;
}


function removeUploadField(div_id, field_id) {
  // ..
}
Also anhand der ID des Felds irgendwie zum Ziel kommen, aber ich weiß nicht, was in die Funktion removeUploadField() kommen muss.

Danke für die Hilfe.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.07.2008, 19:03   Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
Standard

Ich vermute mal, dass folgendes in etwa funktionieren sollte:

Code:
function removeUploadField (div_id, field_id)
{
  var objectFields = document.getElementById (div_id).getElementsByTagName ('input');

  for (var i = 0;
       i < objectFields.count;
       i++)
  {
    if (objectFields[i].type == 'file'
    && objectFields[i].id == field_id)
    {
      document.getElementById (div_id).removeChild (objectFields[1]);
    }
  }
}
Ich habe es nicht getestet und ich übernehme keine Garantie, dass das in allen Browsern so läuf, wenn es denn läuft, aber der Weg, der zu gehen ist sollte klargeworden sein. Wenn es so vielleicht auch nicht klappen sollte, so musst du selber mal ein bisschen rumexperimentieren: http://de.selfhtml.org/javascript/ob...m#remove_child
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.07.2008, 10:08   Nach oben    #3
Patrick Freitag
 
Registriert seit: 17.08.2005
Beiträge: 117
Standard

Oder einfach ganz simpel:
Code:
function removeUploadField(div_id, field_id) {
  document.getElementById(div_id).removeChild(document.getElementById(field_id));
}
Wobei gesagt sei, dass du besser dein Input-Field und deinen Link in einen Div-Container packst, so kannst du es einfacher löschen.

Code:
var count = 1;	

function addUploadField(div_id) { 
  document.getElementById(div_id).innerHTML += '<div id="' + count + '"><input id="' + count + '" class="images" type="file" name="images[]" size="35" />&nbsp; <a href="#" onclick="removeUploadField(\'test\',' + count + ')">x</a></div>';
  count++;
}

function removeUploadField(div_id, field_id) {
  document.getElementById(div_id).removeChild(document.getElementById(field_id));
}
__________________
ProDuc - Mein bescheidender Blog über JavaScript und Co.

Geändert von Neq' (23.07.2008 um 10:12 Uhr).
Neq' ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.07.2008, 10:15   Nach oben    #4
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hi,
danke für die Antworten. Ich habe es noch nicht getestet, allerdings sehe ich nun auf den ersten Blick keinen Unterschied zwischen "mit div" und "ohne div", außer dass ich mir div-Suppe aufbaue!
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.07.2008, 10:21   Nach oben    #5
Patrick Freitag
 
Registriert seit: 17.08.2005
Beiträge: 117
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Hi,
danke für die Antworten. Ich habe es noch nicht getestet, allerdings sehe ich nun auf den ersten Blick keinen Unterschied zwischen "mit div" und "ohne div", außer dass ich mir div-Suppe aufbaue!
Der Unterschied ist, dass dann deine Links mit dem "x" bestehen bleiben und nicht gelöscht werden. Wenn du keine div-Suppe haben möchtest, ließ dich in die DOM-Manipulation ein und erstelle direkt ein neues Input-Element mit ihren Attributen, ist sauberer.
__________________
ProDuc - Mein bescheidender Blog über JavaScript und Co.
Neq' ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.07.2008, 10:34   Nach oben    #6
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Aaah, stimmt. Gut!

Ich verwende das nun so wie du es vorgeschlagen hast. Eigentlich relativ "easy", wenn man es denn mal so vor sich liegen hat.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.07.2008, 12:55   Nach oben    #7
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
Standard

Hmm... Wenn ich so drüber nachdenke, ist es tatsächlich einfacher direkt über die passende ID das Input-Feld zu löschen, manchmal sieht man den Wald vor lauter Bäumen nicht...
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.07.2008, 13:25   Nach oben    #8
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Wobei hier ja nochmals bemerkt werden sollte, dass es in meinem Fall nicht gereicht hat das input-Feld zu löschen, da dahinter ja noch ein Link war.

Aber ich find das Ganze gerade super interessant. Werd mir die Tage mal etwas Lesestoff im Bezug auf diesem DOM-Kram da raussuchen.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.07.2008, 14:35   Nach oben    #9
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Morje,
mir fällt gerade Folgendes auf.

Wenn ich in einem Uploadfeld bereits eine Datei ausgesucht habe und danach per JS ein weiteres Uploadfeld dazufüge ist die Dateiauswahl verschwunden.

Kann man das irgendwie umgehen? Weil das ist nicht gerade nutzerfreundlich. Da hat man 10 Felder befüllt, merkt das man noch ein 11.Bild hat, klickt auf den Link und alle Felder sind leer.

Danke!
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 10:41   Nach oben    #10
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hallo,
ich denke, dass ich mein Problem gelöst habe. Zumindest läuft es gerade so, wie ich es gerne hätte.

Zitat:
Zitat von Neq' Beitrag anzeigen
ließ dich in die DOM-Manipulation ein und erstelle direkt ein neues Input-Element mit ihren Attributen, ist sauberer.
Dem Rat bin ich mal gefolgt (SelfHTML rules) und bin zu folgendem Ergebnis gekommen.

Sind meine ersten Schritte. Wenn es also noch elegantere, kürzere, bessere, ... Wege gibt, dann immer her damit.
Und wenn da irgendwas sogar "falsch" dran sollte, dann bitte ich um rasche Berichtigung. Hab ja nicht den ganzen Tag Zeit, ne?

PHP-Code:
<script type="text/javascript"><!--

// Anzahl der hinzugefuegten Uploadfelder
var count 1;

/*
 * Funktion fuegt ein Uploadfeld inkl. "Entfernen-Link" hinzu
 */
function addUploadField(div_id) {

    
//
    
var uploadField document.createElement('div');
    
uploadField.setAttribute('id''field_' count);
    
uploadField.style.display 'block';

    var 
inputForFile  document.createElement('input');
    
inputForFile.setAttribute('name''image' count);
    
inputForFile.setAttribute('type''file');
    
inputForFile.setAttribute('size''35');
    
inputForFile.style.marginRight '5px';

    var 
removeLink document.createElement('a');
    
removeLink.appendChild(document.createTextNode('x'));
     
removeLink.setAttribute('id''field_' count);
    
removeLink.setAttribute('href''javascript:removeUploadField(\'upload_images\', \'field_' count '\')');
    
removeLink.setAttribute('title''Uploadfeld entfernen');
    
removeLink.className 'link';

    
uploadField.appendChild(inputForFile);
    
uploadField.appendChild(removeLink);

    
document.getElementById(div_id).appendChild(uploadField);
    
count++;
}

/*
 * Funktion entfernt ein mittels addUploadField() hinzugefuegtes Uploadfeld
 */
function removeUploadField(div_idfield_id) {

    
document.getElementById(div_id).removeChild(document.getElementById(field_id));
}

-->
</script> 

Ich habe nun also trotzdem pro Feld ein div-Element. Aber ich hab das irgendwie nicht anders hinbekommen. So ganz 100%ig bin ich damit nicht zufrieden, aber 95% sind es schon. Das reicht erstmal.


DENKSTE!
Na, so leicht kommt ihr mich nicht davon.

Denn Probleme gibt es immer noch, da mein toller Code nur im Firefox (2.x) läuft.

Demnach: HELP!


EDIT:
Also, ich habe oben noch etwas geändert. Der remove-Link wurde vorher per onclick ausgelöst, nun mach ich das mittels href="javascript:removeUploadField(..)".

Jetzt klappt es im FF (2.x), Opera und IE 6.

Und nachdem ich den Safari mal aktualisiert habe, klappt es nun auch dort. Yippieh.

Geändert von Ben (25.07.2008 um 11:47 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
type von hidden zu button bei input lodee JavaScript und AJAX 5 05.10.2006 12:58
[Umfrage] Hover Effekt: CSS oder Javascript DER_Brain Plauderecke 27 12.09.2006 13:05
Java und Javascript Entwickler gesucht $traight-$hoota Gesuche 0 30.08.2006 18:47
Eine Unix Distribution in Javascript.... matt Plauderecke 16 25.06.2005 06:13
Javascript durch php beschleunigen? Heuni PHP-Programmierung 13 20.04.2005 09:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:31 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44