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?
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++; } }
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?
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
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.
[...hab' den Code jetzt nicht getestet ]Code:var theElements=document.formName.elements; for (var i=0;i<theElements.length;i++) { if (theElements[i].name.indexOf("files")==0) { // mach' irgendetwas } };
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?
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.
Doch -- und zwar mit document.forms[0]['files[]']Zitat von theo
Und was ist, wenn JavaScript ausgeschaltet ist?(die werden zum schluss eh noch umstrukturiert, im js, bevor sie an php uebergeben werden).
dann funzt die admin nicht. aber ohne js macht es eh keinen sinn, dann der texteditor heisst tiny mceZitat von rewboss
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
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>
krass! frank ... du bist und bleibst einer meiner groessten js-helden![]()
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)