Avatar billede hopeless Nybegynder
01. november 2005 - 17:55 Der er 11 kommentarer og
1 løsning

Popup øverst, men skal være muligt at lave en input type=file

Hej exp.

Jeg har en stort problem, hvor jeg nu prøver jer..
Jeg bruger showModalDialog til at åbne et dialogvindue hvor jeg har en masse fysiske filer vist. Fra denne dialog har jeg en upload knap som jeg åbner via en open() til et nyt popup vindue.
Dette nye upload vindue må ikke kunne minimeres så jeg har prøvet med
<body onblur="window.focus()">
MEN, da det er en upload funktion i det vindue, kan man ikke bruge <input type=file> nu da det vil gå ind og bryde den onblur. Knappen virker simpelthen ikke..

Jeg kan måske koge spørgsmålet ned til:
Hvordan kan jeg sikre et almindelig vindue åbnet fra et dialogvindue ikke kan minimeres, men samtidig ha mulighed for bruge <input type=file> på den side.
Avatar billede roenving Novice
01. november 2005 - 18:21 #1
Hvorfor laver du ikke bare en ny showModalDialog ?-)
Avatar billede hopeless Nybegynder
01. november 2005 - 18:23 #2
var også min første tanke, men da jeg har en form i det vindue åbner den i endnu et vindue hvis den er åbnet med showModalDialog.

Dvs, koden for selve uploadformen + validering.

<%@ language="JScript" LCID=1030 %>
<%
Response.Buffer = false;
Response.Expires = -10000;
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>Upload Dokument</title>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
var fil = false;
var pic = new Image();
var maxSize=5000000;

function fileOC(){
    pic.src = document.forms[0].fil.value;
}



function valider(){
    if(document.forms[0].fil.value){
        if(pic.fileSize<=maxSize){
            document.getElementById('frm').style.display = "none";
            document.getElementById('loading').style.display = "";
            anim(0);
            return true;
        }else{
            alert("Filstørelsen overskrider "+(maxSize/1000000)+"MB.\nGør dokumentet mindre og prøv igen.\n\nSkal du have hjælp til at ændre størrelsen på dokumentet,\nkan du sende det til webmaster");
            return false;
        }
    }else{
        return false;
    }
}

function anim(nr){
    var bigDot = "nnnnnnnnnn",littleDot = "==========";
    if(nr>10)nr=0
    document.getElementById('loading').innerHTML = bigDot.substr(0,nr)+littleDot.substr(0,(10-nr));
    setTimeout("anim("+(nr+1)+")",200);
}
</SCRIPT>
</head>
<link href="tools.css" rel="stylesheet" type="text/css">
<body>
<fieldset style="padding:5px">
<form ID="frm" method="post" enctype="multipart/form-data" action="upload_fdoc.asp" onSubmit="return valider()">
Fil navn:&nbsp;<br>
<input type="hidden" name="PIC" value="/upload/dokumenter/">
<input type="file" name="fil" size="40" onPropertyChange="fileOC()"><br>
<input type="submit" value="Upload">
</form>
<div id="loading" style="display:none;font-family:webdings;font-size:26px;text-align:center;">==========</div>
</fieldset>
</body></html>
Avatar billede olebole Juniormester
01. november 2005 - 18:41 #3
<ole>

En modalDialog er ikke navigabel, så du kan f.eks. loade en fil med en iframe i den ... i den iframe kan du så loade en fil med en form. Så vil der ikke åbnes et nyt vindue, når formen submittes.

Et andet 'hack' er at submitte en form mod en skjult iframe:

<form ........... target="myFrame">

- og:

<iframe name="myFrame" style="display:none">

/mvh
</bole>
Avatar billede hopeless Nybegynder
01. november 2005 - 19:08 #4
Kan godt se hvad du mener.. Har prøvet at kombinere lidt af det du skriver, men eet problem opstår når min fil så er uploadet.. Der har jeg tidligere lavet et tjek fra min første modal side, som lukkede det vindue efter brug.

Blev jo tidligere åbnet som vindue open()

nu prøver jeg:
fil = showModalDialog('uploaddoc.asp?DOC=<%=sti%>',"","dialogHeight: 50px; dialogWidth: 310px;scroll:no; edge: Raised; center: Yes;");

function getfile(){
    // Loop made to avoid IE5.0 bug in window.opener
    if(!fil.closed){
        if(fil.fil){
            getfilefirst(fil.fil);
            fil.close();
        }else{
            setTimeout("getfile()",1000);
        }
    }else{
        setTimeout("getfile()",1000);
    }
}

Ved du hvordan jeg nu skal lave det tjek?
Avatar billede hopeless Nybegynder
01. november 2005 - 19:09 #5
checket er måske fint nok, men fil.close() virker ik
Avatar billede olebole Juniormester
01. november 2005 - 19:18 #6
Det er da en helt gal måde at bruge en modalDialog på  :)

var fil = null;
fil = showModalDialog('uploaddoc.asp?DOC=<%=sti%>',"","dialogHeight: 50px; dialogWidth: 310px;scroll:no; edge: Raised; center: Yes;");
if (fil) {
  alert("der blev returneret noget" + fil)
}

I modalDialogens dokument skriver du noget à la:

function bla() {
    // gør noget her
    if (BETINGELSE) {
        returnValue = "Et eller andet";
    } else {
        returnValue = false;
    }
    window.close();
}

- og:

<button onclick="bla()">Luk</button>
Avatar billede hopeless Nybegynder
01. november 2005 - 19:32 #7
Hmmm.. Jeg tror ikke jeg kan bevæge mig derhen du vil.. Jeg giver dig lige lidt mere af denne kode i helhed.. Dette laves på en eksisterende modalDialog hvor jeg har en Select med options i for hvert filnavn. Derfor laver jeg checket på denne side og herfra denne side vil jeg også lukke upload vinduet jeg har åbnet, når handlingen er færdig..

var fil;
function upl(){

    fil = open('uploaddoc.asp?DOC=<%=sti%>',"","HEIGHT=50,WIDTH=310,location=no,menubar=no,resizable=no,scrollbars=0,status=no,toolbar=no");
    fil = showModalDialog('uploaddoc.asp?DOC=<%=sti%>',"","dialogHeight: 50px; dialogWidth: 310px;scroll:no; edge: Raised; center: Yes;");
    getfile();
}



function getfilefirst(fil){
    filNavn.options[filNavn.options.length] = new Option(fil,fil);
    filNavn.options[filNavn.options.length-1].selected = true;
}

function getfile(){
    // Loop made to avoid IE5.0 bug in window.opener
    if(!fil.closed){
        if(fil.fil){
            getfilefirst(fil.fil);
            fil.close();
        }else{
            setTimeout("getfile()",1000);
        }
    }else{
        setTimeout("getfile()",1000);
    }
}

ahh, damn. Det er svært at forklare... Jeg prøver lige at gå i tænkeboks igen
Avatar billede hopeless Nybegynder
01. november 2005 - 19:33 #8
hov.   
fil = open('uploaddoc.asp?DOC=<%=sti%>',"","HEIGHT=50,WIDTH=310,location=no,menubar=no,resizable=no,scrollbars=0,status=no,toolbar=no");

var kun lige med fordi jeg ville vise hvordan jeg åbnede uploadvinduet tidligere
Avatar billede hopeless Nybegynder
01. november 2005 - 20:38 #9
Ok.. jeg har lige et spm.
denne:
if (fil) {
  alert("der blev returneret noget" + fil)
}
fanger ikke noget, da fil ligger inde i en iframe og deklereret her i noget VBscript:
Response.Write "<scrip"&"t>fil="""&File.FileName&""";</scrip"&"t>"
Hvordan får jeg transporteret den værdi ud til min modeldialog ?
Avatar billede hopeless Nybegynder
01. november 2005 - 21:08 #10
Ole: ahh. nvm! Du fik hjulpet mig igennem
http://www.eksperten.dk/spm/43132

Der var lige det jeg havde brug for:
<script language="JavaScript">
function onTop() {
    self.focus();
    setTimeout("onTop()",2000);
}
onTop();
</script>
Nu kan jeg forsætte med at bruge almindeligt vindue.. Det andet her blev for kringlet..

Giver du svar ? :)
Avatar billede olebole Juniormester
01. november 2005 - 21:36 #11
- det var godt nok et gammelt spm, du har fundet der  ;o)
Avatar billede hopeless Nybegynder
01. november 2005 - 21:39 #12
heh, men det virker fint. har dog sat den setTimeout til 4000.
Er godt klar over det ikke er den smarteste løsning, da den focus stadig kører i baggrunden når man browser filer lokalt via input=file, men det går :)
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