Avatar billede moejensen Nybegynder
22. september 2004 - 23:34 Der er 15 kommentarer og
1 løsning

tjek for om to ens filnavne er ens

Jeg har 20 file inputfelter i en form, og jeg skal have tjekket på at der ikke er to steder hvor den samme fil er valgt.

jeg tjekker i forvejen på på filtypen, kan jeg koble det smart sammen?

      var submit = true,flt=null;
      var count=false;
     
      for (i=1;i<=20;i++) {
        elmT = f.elements["file"+i];
        elmT.style.backgroundColor='#f4f4f4';
      }
     
      for (i=1;i<=20;i++) {
        elm = f.elements["file"+i];
        if (elm.value!='') {
          count = true;
        }
        if (!elm.value.match(/\.(gif|png|jpg)$|^$/i)) {
          flt = (!flt)?elm:flt;
        }
      }
     
      if(flt){
        alert("filerne skal være af typen .gif, .png eller .jpg");
        flt.style.backgroundColor='red';
        return false;
      }
Avatar billede skovenborg Nybegynder
23. september 2004 - 00:15 #1
Et kort eksempel på hvordan man kan teste om navnene er ens:
for (i=1;i<=20;i++) {
        elm = f.elements["file"+i];
        if (elm.value!='') {
          count = true;
        }
        if (!elm.value.match(/\.(gif|png|jpg)$|^$/i)) {
          flt = (!flt)?elm:flt;
        }
        for (j=i+1;j<=20;j++) {
          if (elm.value == f.elements["file"+j].value) {
            alert("FEJL - navnene er jo ens");
          } 
        }
      }
Avatar billede skovenborg Nybegynder
23. september 2004 - 00:17 #2
...hvis du vil have hjælp til at implementere en smartere måde at udskrive fejlen på siger du lige til (altså hvis du vil have noget i stil med det du gør ved filendelserne).
Avatar billede moejensen Nybegynder
23. september 2004 - 08:12 #3
Det er noget galt, for dengår i en uendelig løkke. Du får lige hele min valinerings kode, så du kan se hvad jeg gør. Er det muligt at den kan markere de felter hvor filerne er ens?

    function valider(f){
      if(f.templateName.value==""){
        alert("Skabelonnavn skal udfyldes");
        f.templateName.select();
        f.templateName.focus();
        return false;
      }
     
      if(f.templateType.value==0){
        alert("Der skal vælges en skabelontype");
        f.templateType.focus();
        return false;
      }
     
      if(f.templateFile.value==0){
        alert("Der skal vælges en skabelonfil");
        f.templateFile.select();
        f.templateFile.focus();
        return false;
      }
     
      if (!f.templateFile.value.match(/\.(htm|html)$|^$/i)) {
        alert("Skabelonen skal være af typen .htm og .html");
        f.templateFile.style.backgroundColor='red';
        return false;
      }
     
      var submit = true,flt=null;
      var count=false;
     
      for (i=1;i<=20;i++) {
        elmT = f.elements["file"+i];
        elmT.style.backgroundColor='#f4f4f4';
      }
     
      for (i=1;i<=20;i++) {
        elm = f.elements["file"+i];
        if (elm.value!='') {
          count = true;
        }
        if (!elm.value.match(/\.(gif|png|jpg)$|^$/i)) {
          flt = (!flt)?elm:flt;
        }
            for (j=i+1;j<=20;j++) {
              if (elm.value == f.elements["file"+j].value) {
                alert("De markerede filer er ens, du kan kun uploade den samme fil en gang.");
              } 
            }
      }
     
      if(flt){
        alert("Grafikfilerne til skabelonen skal være af typen .gif, .png eller .jpg");
        flt.style.backgroundColor='red';
        return false;
      }
     
      RunProgress();
      document.UploadForm.elements.upload.disabled=true;
      document.UploadForm.elements.upload.value='Vent venligst ...';
      return true;
    }
Avatar billede skovenborg Nybegynder
24. september 2004 - 15:25 #4
du har ikke et link til siden du bruger?
Avatar billede moejensen Nybegynder
24. september 2004 - 22:48 #5
desværre ikke, hvad har du brug for af informationer?
Avatar billede skovenborg Nybegynder
24. september 2004 - 23:19 #6
tja, jeg tænkte lidt på hvordan hele siden i sin helhed så ud - altså med form og den slags, altså for at teste problemmet af. Det sådan set lige meget med de andre funktioner, da det er det lille stykke kode, som du viste mig, som er vigtig (og hvad der hører til den), men jeg kunne godt tænke mig at se den form du bruger funktionen på.
Avatar billede moejensen Nybegynder
24. september 2004 - 23:26 #7
formen starter med:

<form method="POST" action="Upload.asp" name="UploadForm" enctype="multipart/form-data" onsubmit="return valider(this);">

og slutter selvfølgelig med </form>

der i mellem er der en række felter, og her iblandt er der 20 file felter der ser således ud:

<tr><td width="120">fil 1:</td><td width="530"><input type="file" size="40" id="file1" name="file1" class="input" onClick="style.backgroundColor='#f4f4f4';"></td></tr>

Der nummeret i rækkefølge file1, file2, file 3 osv
Avatar billede skovenborg Nybegynder
25. september 2004 - 21:31 #8
tja, det var ikke nogen uendelig løkke - bare en hulens masse alert-bokse ;-)

Problemmet var at den også tog tomme elementer med, så for at løse det kan du skrive:
for (i=1;i<=20;i++) {
        elm = f.elements["file"+i];
        if (elm.value!='') {
          count = true;
          for (j=i+1;j<=20;j++) {
              if (elm.value == f.elements["file"+j].value) {
                elm.style.backgroundColor = "red";
                f.elements["file"+j].style.backgroundColor = "red";
                filnavne_ens = true;
              }
            }
        }
        if (!elm.value.match(/\.(gif|png|jpg)$|^$/i)) {
          flt = (!flt)?elm:flt;
        }

      }

      if (filnavne_ens) {
            alert("Du har valgt to ens filnavne");
            return false;
      }
Avatar billede skovenborg Nybegynder
25. september 2004 - 21:31 #9
...her bruger jeg den løsning med at markere de felter som er ens.
Avatar billede moejensen Nybegynder
26. september 2004 - 12:59 #10
Den er der næsten. Nu markere den de to felter der er ens og kommer med en fejl, men hvis jeg så sletter indholdet af felterne, så skriver den stadig at der er en fejl.
Avatar billede skovenborg Nybegynder
27. september 2004 - 23:55 #11
nåja, du skal lige i starten af valider-funktionen skrive "filnavne_ens = false;":
function valider(f){
filnavne_ens = false;
      if(f.templateName.value==""){
        alert("Skabelonnavn skal udfyldes");
        f.templateName.s
Avatar billede skovenborg Nybegynder
27. september 2004 - 23:55 #12
...sådan at man resetter status omkring filnavnene for hver gang - det tog den ikke højde for før.
Avatar billede moejensen Nybegynder
28. september 2004 - 07:58 #13
så virker det  :-)

Laver du lige et svar.
Avatar billede skovenborg Nybegynder
28. september 2004 - 20:01 #14
jo værsgo' - og undskyld det tog så lang tid, havde bøvl med min mail, så jeg kunne ikke rigtig vide hvornår du havde skrevet ;)
Avatar billede moejensen Nybegynder
28. september 2004 - 20:09 #15
det er jo hvad der sker, jeg venter gerne :-)
Avatar billede skovenborg Nybegynder
29. september 2004 - 23:48 #16
det var godt - og tak for points :-)
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