Avatar billede mickiii Nybegynder
15. juni 2005 - 21:39 Der er 6 kommentarer og
1 løsning

element has no properties i FF, virker i IE

Hej,

Jeg har nedenstående script, som bruges til et multiuploader script. Det fungere fint i IE, men i FF får jeg fejlen 'file has no properties' i linie 39.

Jeg må inderømme at jeg simpelthen ikke kan se hvad der er galt. Jeg tror jeg har stirret mig blind på det efterhånden.

        var fileNumber = 0;
            var fileCount = 0;
           
            function addFile()
            {
                var files = document.getElementsByTagName("input");
                for (var i = 0; i < files.length; i++) {
                    if (files[i].type == "file" &&
                        files[i].style.display == "")
                        return;
                }                               
               
                fileNumber++;
               
                var file = document.createElement("input");
                file.type = "file";
                file.id = "file" + fileNumber;
                file.name = "file" + fileNumber;
                file.size = 32;
               
                file.onchange = onFileChange;
               
                var fileContainer = document.getElementById("fileContainer");
                fileContainer.appendChild( file );
               
                document.getElementById("addFile").style.display = "none";                                           
            }
           
            function onFileChange(e)
            {
                if (!e) {
                    e = window.event;
                }
               
                var labelContainer = document.getElementById("labelContainer");
                var file = e.srcElement;
               
                var fileName = file.value;
               
                if( fileName == "" ) {
                    fileContainer.removeChild(file);
                    document.getElementById("addFile").style.display = "";                   
                } else {                   
                    var i = fileName.lastIndexOf("\\");                   
                    if (i >= 0) {
                        fileName = fileName.substr(i+1);
                    }
                    else {
                        window.alert("Forkert fil!");
                        document.getElementById("addFile").style.display = "";
                        fileContainer.removeChild(file);
                        return;
                    }
                   
                    i = fileName.lastIndexOf(".");
                    var extension = "";
                    if (i >= 0) {
                        extension = fileName.substr(i+1);
                    } else {
                        window.alert("Forkert fil!");
                        document.getElementById("addFile").style.display = "";
                        fileContainer.removeChild(file);
                        return;
                    }
                   
                    var imageType = "";
                    switch (extension.toLowerCase()) {
                        case "jpg":
                        case "jpeg":
                            imageType = "JPG";
                            break;
                        case "gif":
                            imageType = "GIF";
                            break;
                        case "png":
                            imageType = "PNG";
                            break;
                        case "bmp":
                            imageType = "BMP";
                            break;
                        default:
                            window.alert("Forkert format! (" + extension + ")");
                            document.getElementById("addFile").style.display = "";
                            fileContainer.removeChild(file);
                            return;
                    }
                   
                    file.style.display = "none";
                   
                    var label = labelContainer.insertRow();
                    label.id = "label" + fileNumber;
                   
                    var cell1 = label.insertCell();
                    cell1.style.color = "#cc0000";
                    cell1.style.fontWeight = "bold";
                    cell1.innerHTML = imageType;
                   
                    var cell2 = label.insertCell();
                    var a = document.createElement("a");
                    a.href = file.value;
                    a.className = "link";
                    a.target = "_blank";
                    a.onmouseover = showThumbnail;
                    a.onmouseout = hideThumbnail;
                    a.innerText = fileName;
                    cell2.appendChild( a );
                   
                    var cell3 = label.insertCell();
                    cell3.innerHTML = "<img id='img" + fileNumber + "' onload='java script:setSize(this)' src='file://" + file.value.replace("\\", "/") + "' style='visibility:hidden'>";
                   
                    var cell4 = label.insertCell();
                    cell4.innerHTML = "<input type='text' name='desc" + fileNumber + "' maxlength='64' class='form_new_ad' style='width:90%' value='" + fileName.charAt(0).toUpperCase() + fileName.substr(1, fileName.lastIndexOf(".")-1).replace(/_/g, " ") + "'>";
                   
                    var cell5 = label.insertCell();
                    cell5.style.textAlign = "right";
                    cell5.innerHTML = "<a href='#' onclick='java script:removeFile(" +
                        fileNumber + ");'>Fjern</a>";
                                           
                    fileCount++;
                   
                    document.getElementById("addFile").style.display = "";
                }
            }
           
            function setSize(img)
            {
                var width = img.width;
                var height = img.height;
                img.parentElement.innerText = width + "x" + height;
            }
           
            function showThumbnail(e)
            {                       
                if (!e) {
                    e = window.event;
                }           
                var a = e.srcElement;
               
                var thumbnail = document.getElementById("thumbnail");
                thumbnail.style.visibility = "visible";
                thumbnail.style.left = e.clientX + "px";
                thumbnail.style.top = (e.clientY + 10) + "px";
               
                var img = document.createElement("img");               
                thumbnail.appendChild( img );
                img.onload = showThumbnailOnLoad;
                img.src = a.href;                                               
            }
           
            function hideThumbnail()
            {
                var thumbnail = document.getElementById("thumbnail");
                thumbnail.innerText = "";
                thumbnail.style.visibility = "hidden";
            }
           
            function showThumbnailOnLoad(e)
            {
                if (!e) {
                    e = window.event;
                }
               
                var MAX_WIDTH = 320;
                   
                var img = e.srcElement;
                if (img.width > MAX_WIDTH) {
                    var ratio = img.height / img.width;
                    img.width = MAX_WIDTH;
                    img.height = Math.round(ratio * MAX_WIDTH);
                }
               
                img.parentElement.style.width = img.width + "px";
                img.parentElement.style.height = img.height + "px";                                               
            }
           
            function removeFile(number)
            {
                var fileContainer = document.getElementById("fileContainer");
                var labelContainer = document.getElementById("labelContainer");
               
                var file = document.getElementById("file" + number);
                var label = document.getElementById("label" + number);
               
                fileContainer.removeChild( file );               
                labelContainer.deleteRow( label.rowIndex );
               
                fileCount--;
            }                   
           
            function validateForm()
            {
                if( fileCount == 0 ) {
                    window.alert("Du skal vælge nogen filer!");
                    return false;
                } else {
                    var files = document.getElementsByTagName("input");
                    var ids = "";
                    var prefix = "";
                    for (var i = 0; i < files.length; ++i) {
                        if (files[i].type == "file") {
                            ids += prefix + files[i].id.substr(4);
                            prefix = ",";
                        }
                document.getElementById("ids").value = fileCount;
                document.forms['new_ad'].submit();
                    }
                    return true;
                }
            }



Håber virkelig nogen kan hjælpe, da jeg er ved at blive sindsyg over det.
Avatar billede roenving Novice
15. juni 2005 - 23:49 #1
-- og hvilken linje er nummer 39 ?-)
Avatar billede olebole Juniormester
16. juni 2005 - 02:22 #2
<ole>

MS har jo altid haft et yderst løst forhold til begrebet sikkerhed, hvilket formodentlig er årsagen til, det virker i IE.
Normalt har du ingen muligheder for at behandle et type="file" input med script  :)

/mvh
</bole>
Avatar billede mickiii Nybegynder
16. juni 2005 - 09:23 #3
Linie 39 er her:

            function onFileChange(e)
            {
                if (!e) {
                    e = window.event;
                }
               
                var labelContainer = document.getElementById("labelContainer");
                var file = e.srcElement;
               
                var fileName = file.value; <!--------HER!!!!!!!!!----------->


Ole,

Nu skriver du at man normalt ikke har, men kan det alligevel opnås på en måde?
Avatar billede roenving Novice
16. juni 2005 - 11:01 #4
-- så prøv denne:

                var labelContainer = document.getElementById("labelContainer");
                var file = (e.srcElement?e.srcElement:e.target);
               
                var fileName = file.value;
Avatar billede mickiii Nybegynder
16. juni 2005 - 18:31 #5
roenving,

Super, det virkede, der er nu lidt problemer med image preview i FF, men det skyldes højst sandsynligt den sikkerhedsbrist som IE indeholder. Den vil ihvertfald ikke generere linket til filen.

Smid et svar.
Avatar billede roenving Novice
16. juni 2005 - 22:29 #6
Velbekomme '-)
Avatar billede roenving Novice
17. juni 2005 - 12:41 #7
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester