Avatar billede timmwillum Nybegynder
20. november 2007 - 20:30 Der er 25 kommentarer og
1 løsning

Problemer med at slette formfelt og lave popup

Hej

Har en uploadfunktion, hvor jeg kontrollerer, at det er jpg upload vha javascript ... det virker fint. Men jeg ville gerne slette indholdet af feltet, hvis brugeren har prøvet at uploade fx gif og har fået fejl. Det virker dog ikke som vist herunder, og jeg har også prøvet med en myForm.FILE1.clear();

Koden ser sådan ud:


<script LANGUAGE="JavaScript">
function valider(myForm) {
  if ( myForm.FILE1.value.length > 0 ) {
      var reg = /\.jpe?g$/i;
      if(myForm.FILE1.value.match(reg))return true;)
          alert ("Du skal angive et .jpg- eller .jpeg-billede.");
          myForm.FILE1.value='';
          myForm.FILE1.focus();
          return false;
  } else {
      alert ("Du skal angive et billede.");
      myForm.FILE1.focus();
      return false;
  };
 
  return true;
};
</script>


Derudover ville jeg gerne indsætte en pop-up, hvis når opload går i gang, som giver besked om, at opload kører. Det er noget i stil med alert('Tålmodighed') ... men hvordan indarbejder jeg det i ovenstående???
Avatar billede erikjacobsen Ekspert
20. november 2007 - 20:35 #1
Du kan ikke ændre indholdet af et <input type="file" ...>-felt
Avatar billede erikjacobsen Ekspert
20. november 2007 - 20:36 #2
Det eneste du kan, med et sådant felt, er at nulstille alle felter på formen, med en <input type="reset">
Avatar billede timmwillum Nybegynder
20. november 2007 - 20:57 #3
øøøøøhhh ... det forklarer jo hvorfor det ikke virker. Men hvordan indarbejder jeg så en "reset" i scriptet? Kan det så overhovedet lade sig gøre?
Avatar billede erikjacobsen Ekspert
20. november 2007 - 21:14 #4
En "reset" vil jo så slette alle andre felter også (man kan måske gemme dem med javascript, og hente dem igen). Men du kan jo bare lade være med at slette feltet...?
Avatar billede timmwillum Nybegynder
20. november 2007 - 21:45 #5
Det er en oploadformular, så der er faktisk kun det ene felt. Så kan det lade sig gøre, hører jeg gerne hvordan det kan gøres ...
Avatar billede erikjacobsen Ekspert
20. november 2007 - 21:51 #6
Ah, ok, på den måde. Erstat linien

    myForm.FILE1.value='';

med

    myForm.reset();

og se om det ikke ku' virke.
Avatar billede timmwillum Nybegynder
20. november 2007 - 22:39 #7
bingo bongo ... det virkede.

Tak for hjælpen

Smid lige et svar, så du kan få point!
Avatar billede erikjacobsen Ekspert
20. november 2007 - 22:47 #8
Jeg samler slet ikke på point, tak. Læg selv et svar, og accepter det.
Avatar billede timmwillum Nybegynder
21. november 2007 - 08:09 #9
Nej det gør jeg heller ikke selv ... det er ellers meget moderne :-)

Kan du også hjælpe mig med et pop-up, når brugeren så har valgt en jpg fil. Jeg ville gerne lave en alert eller et desideret pop-up vindue, som så lukkes igen, når brugeren kommer over på uploadsiden (efter opload). Tanken er, at informere brugeren om, at det kan tage noget tid at uploade.

Lige nu har jeg indsat et pop-up som en onclick i min send-knap. Men så får jeg pop-up'en også når der er valgt en forkert fil som fx gif, og brugeren derfor returneres til formularen (upload er så ikke i gang). Jeg kan ikke rigtig få det til at virke, når jeg prøver at indsætte det i funktionen (nok fordi jeg ikke er helt skarp på javascript).
Avatar billede erikjacobsen Ekspert
21. november 2007 - 08:39 #10
Du kunne lave din popup lige før din "return true;" - lidt mere tricket at få den fjernet, når uploaden er færdig. (...hvad du nu mener med popup...)

Ellers ville jeg bare lave en simpel løsning: en animeret gif, man sætter på mens den uploader, og den er så væk på næste side.

Du er iøvrigt også klar over, at dit check for fil-extension på klienten i Javascript, kun kan betragtes som en hurtig fejlbesked til brugeren. Du skal yderligere lave et check på serveren, da man ellers vil kunne uploade vilkårlige filer, fx PHP-filer.
Avatar billede timmwillum Nybegynder
21. november 2007 - 09:18 #11
Havde egentlig ikke tænkt over check på serveren, men det er da nok en god ide. Det burde være ret simpelt. Men jeg er da ikke sikker på at du har ret i, at det er muligt at vælge fx php-filer. Jeg har lige prøvet at oploade en asp-fil ... det kunne jeg ikke. Ikke desto mindre laver jeg et servercheck ... better safe than sorry.

Med pop-up mener jeg bare en død html side, hvor jeg fjerner scrollbar, menulinjer m.v. og giver en kort besked til brugeren. Har prøvet at indsætte en

MyWindow=window.open('loader.htm','MyWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=200,height=100,left=1,top=1')

... som onclick i send-knappen. Men sådan skal den vel næppe se ud i funktionen?

Hvordan ville du lave en løsning med en gif? Den skulle jo så kun være synlig i forbindelse med selve upload ...
Avatar billede timmwillum Nybegynder
21. november 2007 - 09:29 #12
... der gik et eller andet galt, da jeg klippede MyWindow-koden ind ... den stopper naturligvis ikke så pludseligt :)
Avatar billede erikjacobsen Ekspert
21. november 2007 - 09:53 #13
Dem, der vil uploade en php-fil, vil nok ikke bruge dit script, eller sågar en browser. Derfor altid, altid, altid check extension på filen på serveren.

Prøv bare at sætte din linie med "window.open" ind som den står. Problemet er bare at få den væk igen når upload er færdig.

Den med gif-fen:  <img src="blank.gif" id="g">
og så          document.getElementById("g").src="nogetderbevægersig.gif";
Avatar billede roenving Novice
21. november 2007 - 13:50 #14
-- en simpel måde at override dit script vil være at lave en ny tom funktion ved at skrive i adresselinjen (så server-side check er et must !-)
Avatar billede timmwillum Nybegynder
21. november 2007 - 20:48 #15
... hmmmm ... kan altså ikke få det pop-up vindue til at åbne via scriptet. Har prøvet sådan:


<script LANGUAGE="JavaScript">
function valider(myForm) {
  if ( myForm.FILE1.value.length > 0 ) {
      var reg = /\.jpe?g$/i;
      if(myForm.FILE1.value.match(reg))return true;
          alert ("Du skal angive et .jpg- eller .jpeg-billede.");
          myForm.reset();
          myForm.FILE1.focus();
          //MyWindow.close();
          return false;
  } else {
      alert ("Du skal angive et billede.");
      myForm.FILE1.focus();
      return false;
  };
  window.open('loader.htm','MyWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=200,height=100,left=1,top=1');
  return true;
};
</script>


Har også prøvet bare med window.open('loader.htm') ... gode forslag?
Avatar billede timmwillum Nybegynder
21. november 2007 - 20:57 #16
... arggghh ... dit trick med document.getElementById("g").src="../images/grafikfiler/loading.gif"; indsat før return true, virker heller ikke
Avatar billede timmwillum Nybegynder
21. november 2007 - 20:58 #17
har naturligvis lagt <img src="blank.gif" id="g"> ind på siden
Avatar billede erikjacobsen Ekspert
21. november 2007 - 21:25 #18
20:48:53 - inden du når ned til window.open har du sagt return (enten true eller false), og der stopper funktionen.

gif-tricket burde virke ... lad mig se om jeg kan lave et eksempel ...
Avatar billede erikjacobsen Ekspert
21. november 2007 - 21:38 #19
Avatar billede erikjacobsen Ekspert
21. november 2007 - 21:39 #20
(jeg valgte at lege med visibility i stedet for at have en blank.gif)
Avatar billede timmwillum Nybegynder
21. november 2007 - 22:11 #21
Ja, se det gjorde jo en forskel ... kloge her havde jo placeret linjen helt forkert, hvilket jeg kunne se ved at lure din kode. Tak.

Sidste spørgsmål ... hvilke effekt har alert(7); som står lige før den sidste return true, ... og behøver jeg den?
Avatar billede erikjacobsen Ekspert
21. november 2007 - 22:29 #22
Nej - alert(7) var en lille test for at være sikker på du aldrig kom der ned.

Jeg ville nok tænke lidt over rækkefølgen af dine tests med if-sætninger, så der ikke står en "return true" og flagrer midt i det hele, og heller ikke er en overflødig "return true" i bunden. Noget i retning af

if (...fejl1...) {
    ....
    return false;
}
if (...fejl2...) {
    ....
    return false;
}
// ingen fejl, juhuu
return true
Avatar billede timmwillum Nybegynder
22. november 2007 - 20:07 #23
Fik overaskende din anbefaling til at virke ... næsten :-)

Scriptet virker ok mht. jpg, men desværre kontrollerer den ikke for nullængde først. Dvs. at jeg får en "du skal vælge jpg", hvis jeg bare trykker send uden at vælge noget overhovedet. Hvorfor det? Scriptet ser sådan ud nu:

<script LANGUAGE="JavaScript">
function valider(myForm) {

    var reg = /\.jpe?g$/i;
    if (myForm.FILE1.value.length = 0) {
        alert ("Du skal angive et billede.");
        myForm.FILE1.focus();
        return false;
    }
    if (!myForm.FILE1.value.match(reg)) {
          alert ("Du skal angive et .jpg- eller .jpeg-billede.");
          myForm.reset();
          myForm.FILE1.focus();
        return false;
    }
    // ingen fejl, juhuu
    document.getElementById("g").style.visibility="visible"; 
    return true
};
</script>
Avatar billede erikjacobsen Ekspert
22. november 2007 - 21:16 #24
Ikke
  if (myForm.FILE1.value.length = 0) {
men
  if (myForm.FILE1.value.length == 0) {
Avatar billede timmwillum Nybegynder
22. november 2007 - 21:52 #25
argggghhhh ... for længe siden, jeg har arbejdet med javascript ... tak
Avatar billede timmwillum Nybegynder
10. februar 2008 - 10:49 #26
Hej igen Erik

Jeg har lige stillet endnu et spørgsmål relateret til dette. Måske kan du hjælpe mig med at udvide ovenstående, så den også accepterer gif (det har jeg pludselig brug for i anden forbindelse). Se evt. spørgsmålet her:

http://www.eksperten.dk/spm/818798
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