 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
25.01.2006, 18:42
|
#1
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
array nur im ff
moinsen gemeinde!
ich geb nach langem probieren auf. ueber eine funktion lasse ich in einem formular ein inputfeld type "file" aufbauen. wird dieses feld gefuellt, so wird ein neues feld gleichen typs aufgebaut.
soweit so gut. die namen aller input-felder sind identisch. ff behandelt die uebergabe daher als array und ich kann es problemlos ansprechen und auslesen. ie irgnoriert die felder voellig.
nachdem ich mit document.forms[0].files.length die anzahl der schluessel ausgeben lassen wollte und der ie mir als antwort "files habe keine eigenschaften" ausgespuckt hat, habe ich die sache als string behandeln wollen. doch auch der direkte zugriff per document.forms[0].files.value hatte das gleiche ergebnis.
nu bin ich ratlos. ich brauche dringend ein array und was noch schlimmer ist: es MUSS im ie funzen.
kann mir jemand einen tip geben?
danke,
hardy
ps: hier noch die funtion ...
Code:
function insert_file_input(divname) {
if (document.getElementById(divname) != null) {
var fx = document.getElementById(divname);
var inp = document.createElement("input");
inp.size = 60;
inp.maxlength = 80;
inp.className = "submit";
inp.type = 'file';
inp.name = 'files'; // wieder automatisch ein array (im ff); ie kann damit nicht um
inp.id = 'fileId'+filecount;
inp.onchange = function() {showImage(this.id);};
inp.ondblclick = function() {showImage(this.id);};
var img = document.createElement("img");
img.src = '../images/admin/preview.gif';
img.width = 25;
img.height = 20;
img.style.cursor = 'pointer';
img.style.cursor = 'hand';
img.title = 'Vorschau';
img.alt = img.title;
img.name = 'fileId'+filecount;
img.onclick = function() {showImage(this.name);};
var br = document.createElement("br");
// kontrolle, ob bildname bereits vorhanden ist
// string mit allen bereits hochgeladenen bildern holen und per match() test laufen lassen
fx.appendChild(img);
fx.appendChild(inp);
fx.appendChild(br);
filecount++;
}
}
|
|
|
25.01.2006, 20:12
|
#2
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Hi Hardy,
brauchst Du das Array im Javascript oder auf Serverseite? Wenn's innerhalb PHP ist, probier' doch mal als Namen "files[]". Das ist zwar nicht W3C-konform, aber wenn's Dir hilft.
Tschau
Frank
P.S. Warum bzw. wann brauchst Du das Array?
|
|
|
25.01.2006, 20:31
|
#3
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
hi frank,
ich brauche es vorerst lokal. ich kann immer wieder in die vorschau wechseln und mir die aktuell eingetragenen files anschauen. also erstmal nix server. die sachen gehen spaeter alle zusammen ans php und auf den server bzw. in die db. aber eben erst, wenn alle angaben vollstaendig sind.
es muss also innerhalb des js ne loesung sein.
das array selbst brauche ich, weil ich in dem array bildnamen habe. die muss ich mit auf dem server vorhandenen dateien vergleichen, um ein ueberschreiben zu vermeiden. da soll also dann noch vor der uebergabe an den server noch ein warnhinweis bei bereits vorhandenen namen erscheinen.
array macht sich in meinen augen auch am besten, weil ich die anzahl der uebergebenen inputfelder nicht feststeht und permanent variabel ist.
gruss
hardy
|
|
|
25.01.2006, 22:41
|
#4
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
So richtig hab' ich's noch nicht verstanden.
Wenn Du name="files[]" setzt, sollte PHP später das ganze als "Array" ansprechen.
Du kannst natürlich auch einfach über die "elements" gehen.
Code:
var theElements=document.formName.elements;
for (var i=0;i<theElements.length;i++)
{
if (theElements[i].name.indexOf("files")==0)
{
// mach' irgendetwas
}
};
[...hab' den Code jetzt nicht getestet ]
Hier könntest Du dann ein neues Array generierten und mit "push" die Elementes hinzufügen oder aber die Validierung direkt machen.
Vielleicht hilft's ja?
|
|
|
26.01.2006, 09:30
|
#5
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
files[] will ich nicht setzen, weil js damit nicht klarkommt. ich brauche aber fuer meine vorschau die daten erstmal nur im js (die werden zum schluss eh noch umstrukturiert, im js, bevor sie an php uebergeben werden).
die elemente des formulars durchzugehen ist auch keine loesung, da es noch wesentlich mehr elemente gibt (textfelder, radiobutton usw.). ich suche also nach einer loesung, bei der ich die gruppe der inputfelder selektieren kann.
|
|
|
26.01.2006, 10:47
|
#6
|
|
TP-Specialist
Registriert seit: Mar 2005
Ort: Unterfranken
|
Zitat:
|
Zitat von theo
files[] will ich nicht setzen, weil js damit nicht klarkommt.
|
Doch -- und zwar mit document.forms[0]['files[]']
Zitat:
|
(die werden zum schluss eh noch umstrukturiert, im js, bevor sie an php uebergeben werden).
|
Und was ist, wenn JavaScript ausgeschaltet ist?
|
|
|
26.01.2006, 10:52
|
#7
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
Zitat:
|
Zitat von rewboss
Und was ist, wenn JavaScript ausgeschaltet ist?
|
dann funzt die admin nicht. aber ohne js macht es eh keinen sinn, dann der texteditor heisst tiny mce
ich hab es jetzt ueber ein extra-array und push geloest bekommen (manchmal muss man einfach ne nacht drueber schlafen). aber den hinweis mit dem array teste ich nochmal.
danke ihr beiden!
hardy
|
|
|
26.01.2006, 20:10
|
#8
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Es hat mir einfach keine Ruhe gelassen: Hier ist die Lösung des Problems: Der MSIE erzeugt jetzt mit "insertAdjacentHTML" auch ein Array:
Test
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Malleus' Test</title>
<script type="text/javascript">
function initPage()
{
oMyForm=document.forms[0];
};
function createNewControl(theForm,controlType,controlName)
{
if (theForm.insertAdjacentHTML)
{
theForm.insertAdjacentHTML("beforeEnd",'<input type="'+controlType+'" name="'+controlName+'"/>');
return theForm.lastChild;
}
else
{
var newControl=document.createElement("input");
newControl.setAttribute("type",controlType);
newControl.setAttribute("name",controlName);
theForm.appendChild(newControl);
return newControl;
};
};
function check4NewControl(myControl)
{
if (myControl.value)
{
oMyForm.appendChild(document.createElement("br"));
var newFileControl=createNewControl(oMyForm,"file","myFiles");
newFileControl.onchange=function(){check4NewControl(this)};
}
}
function checkIt()
{
alert(oMyForm["myFiles"].length);
}
</script>
</head>
<body onload="initPage()">
<button onclick="checkIt()">alert( document.myForm.myFiles.length )</button>
<form name="myForm">
<input type="file" name="myFiles" onchange="check4NewControl(this)">
</form>
</body>
</html>
|
|
|
27.01.2006, 12:01
|
#9
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
krass! frank ... du bist und bleibst einer meiner groessten js-helden 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:48 Uhr.
|
 |