Avatar billede moejensen Nybegynder
07. juli 2004 - 08:51 Der er 42 kommentarer og
1 løsning

har brug for endnu lidt java tjek hjælp

Jeg har en form der indeholder en række file felter de har navnene: file1, file2, file3 osv

når jeg tjekker dem, skal mindst en af dem indeholde noget: jeg bruger følgende:

if(f.file1.value==""){
          alert("Der skal vælges mindst én fil");
          f.file1.select();
          f.file1.focus();
          return false;
          }

Men hvordan omskriver jeg den, så den tjekker alle file felter fra file1 til file9?
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 08:54 #1
Tjekker hvordan? Mener du at du vi undersøge, at der skal være mindst
eet af de 9 felter med en fil angivet, men det er ligegyldigt hvilken, og
at der gerne må være flere?
Avatar billede roenving Novice
07. juli 2004 - 08:57 #2
function checkFiles(f){
  e = f.elements,files=false;
  for(i=0;e.length>i;i++){
    if(e.type=='file')files=(e.value!="")||files;
  }
  if(!files){
    alert("Der skal vælges mindst én fil");
    f.file1.select();
    f.file1.focus();
    return false;
  }
}
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 08:58 #3
Eller:

  function validate(f) {
    var count=0;
    for (i=1;i<=9;i++) {
      if (f.elements["file"+i].value!='') {
        count++;
      }
    }
    if (count==0) {
      alert("Husk....");
      return false;
    }
    return true;
  }

og så i din form

<form ... onsubmit="return validate(this)">
Avatar billede moejensen Nybegynder
07. juli 2004 - 09:01 #4
det var godt nok hurtigt.

Er det også muligt at sætte ind, så den tjekker om endelsen er enten .txt, .doc, .pdf, .xls??

noget med: if!(f.file1.value.indexOf(".txt") > -1)

Så den skriver at den valgte filtype er forkert. og så ændre den border farve på det felt der er fejl i?
Avatar billede moejensen Nybegynder
07. juli 2004 - 09:05 #5
jeg prøvede lige roenvings og den submitter godt nok hvis der er en fil i en af felterne, men den kommer også med fejlen, hvis ikke der er noget i den første.

Det kan være mig der fik skrevet forkert. Grunden til at jeg satte nedenstående ind, var for at vise hvad den skulle gøre, det er ikke et must at file1 skal være udfyldt. det kan lige så godt være file3 bare der er en der er udfyldt.

if(f.file1.value==""){
          alert("Der skal vælges mindst én fil");
          f.file1.select();
          f.file1.focus();
          return false;
          }
Avatar billede roenving Novice
07. juli 2004 - 09:14 #6
?-)

Den udgave burde blive tilfreds med at kun een var valgt ...


Ja, da, men så skal vi en anelse længere omkring !-)

function checkFiles(f){
  e = f.elements,files=false,flt=null;
  for(i=0;e.length>i;i++){
    if(e.type=='file'&&e.value!=""){
      if(!e.value.match(/\.(txt|doc|pdf|xls)$/i)){
        flt = (!flt)?e:flt;
      }
      files=true;
    }
  }
  if(flt){
    alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
    flt.select();
    flt.focus();
    return false;
  }
  if(!files){
    alert("Der skal vælges mindst én fil");
    f.file1.select();
    f.file1.focus();
    return false;
  }
}
Avatar billede moejensen Nybegynder
07. juli 2004 - 09:24 #7
Den brokker sig stadig hvis jeg ex kun vælger en fil i file2, men submitter stadig formen.

Kan jeg sætte ind i denne her, så den ændre border farven på det felt hvor filtypen er forkert?

if(flt){
    alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
    flt.select();
    flt.focus();
    return false;
  }
Avatar billede moejensen Nybegynder
07. juli 2004 - 10:54 #8
burde jeg ikke gøre noget i stil med:

        function valider(f)
        {
        e = f.elements,files=false,flt=null;
          for(i=0;e.length>i;i++){
          if(!e.value.match(/\.(txt|doc|pdf|xls)$/i)){
              alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
                e.select();
                e.focus();
                return false;
            }
          }
         
          for(i=0;e.length>i;i++){
            if(e.type=='file'&&e.value=""){
                alert("Der skal vælges mindst én fil");
                e.select();
                e.focus();
                document.all['file' + i].style.border-color: red;
                return false;
              }
          }

          RunProgress();
          var strBtnSubmit=document.UploadForm.elements.upload;
            strBtnSubmit.disabled=true;
            strBtnSubmit.value='Vent venligst ...';
          document.UploadForm.submit();
      }
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 11:00 #9
Du kan ikke bruge document.all, og sætter du styles med javascript skal du gøre det noget i denne utestede retning:

document.getElementById('file' + i).style.borderColor='red';

hvor du har en < .... id="file7" ....> på dine felter.
Avatar billede moejensen Nybegynder
07. juli 2004 - 11:05 #10
takker, alle mine inputboxe har id file1...file9

jeg har stadig fejl i følgende linje:  if(e.type=='file'&&e.value=""){
Avatar billede moejensen Nybegynder
07. juli 2004 - 11:06 #11
Den siger syntax error
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 11:07 #12
Det er jo sådan set heller ikke det roenving skrev:

    if(e.type=='file'&&e.value!=""){
Avatar billede moejensen Nybegynder
07. juli 2004 - 11:14 #13
nej, men den skal vel gå ind i løkken, hvis feltet er tomt?
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 11:15 #14
Nå, du har lavet så meget om. Men så hedder det == og ikke =
Avatar billede moejensen Nybegynder
07. juli 2004 - 11:16 #15
den brokker sig også e.value i denne linie:
if(!e.value.match(/\.(txt|doc|pdf|xls)$/i)){

referere e. ikke til det pågældende element?
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 11:19 #16
if(!e[i].value.match(/\.(txt|doc|pdf|xls)$/i)){
Avatar billede moejensen Nybegynder
07. juli 2004 - 11:29 #17
Den brokker sig godt nok noget.

Skal jeg referere til e[i], hvor jeg referere til det pågældende element?

koden ser nu således ud:

function valider(f)
        {
        e = f.elements,files=false,flt=null;
          for(i=0;e.length>i;i++){
            if(e.type=='file'&&e.value==""){
                alert("Der skal vælges mindst én fil");
                e[i].select();
                e[i].focus();
                return false;
              }
          }
         
          for(i=0;e.length>i;i++){
          if(!e[i].value.match(/\.(txt|doc|pdf|xls)$/i)){
              alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
                e[i].select();
                e[i].focus();
                document.getElementById('file' + i).style.borderColor='red';
                return false;
            }
          }

          RunProgress();
          var strBtnSubmit=document.UploadForm.elements.upload;
            strBtnSubmit.disabled=true;
            strBtnSubmit.value='Vent venligst ...';
          document.UploadForm.submit();
      }
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 11:36 #18
Hele tiden e[i]
Avatar billede moejensen Nybegynder
07. juli 2004 - 11:57 #19
okay, jeg kan godt se at mit eksempel ikke kan holde, for det tjekker ikke på at det kun er nødvendigt at en af felterne er udfyldt, så jeg er gået tilbage til roenvings sidste bud. men det submitter selvom der ikke er valgt nogen fil, den kommer godt nok med fejlmedelselsen, men så kører den videre. Koden ser nu således ud:

        function valider(f)
        {
        e = f.elements,files=false,flt=null;
          for(i=0;e.length>i;i++){
            if(e.type=='file'&&e.value!=""){
              if(!e.value.match(/\.(txt|doc|pdf|xls)$/i)){
                flt = (!flt)?e:flt;
              }
              files=true;
            }
          }
          if(flt){
            alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
            flt.select();
            flt.focus();
            document.getElementById('file' + i).style.borderColor='red';
            return false;
          }
          if(!files){
            alert("Der skal vælges mindst én fil");
            f.file1.select();
            f.file1.focus();
            return false;
          }

          RunProgress();
          var strBtnSubmit=document.UploadForm.elements.upload;
            strBtnSubmit.disabled=true;
            strBtnSubmit.value='Vent venligst ...';
          document.UploadForm.submit();
      }
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 12:02 #20
Men du skal jo rette roenvings fejl - han glemte at skrive e[i] flere steder
Avatar billede moejensen Nybegynder
07. juli 2004 - 12:05 #21
så skulle det være rettet, men den submitter stadig:

function valider(f)
        {
        e = f.elements,files=false,flt=null;
          for(i=0;e.length>i;i++){
            if(e[i].type=='file'&&e[i].value!=""){
              if(!e[i].value.match(/\.(txt|doc|pdf|xls)$/i)){
                flt = (!flt)?e[i]:flt;
              }
              files=true;
            }
          }
          if(flt){
            alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
            flt.select();
            flt.focus();
            document.getElementById('file' + i).style.borderColor='red';
            return false;
          }
          if(!files){
            alert("Der skal vælges mindst én fil");
            f.file1.select();
            f.file1.focus();
            return false;
          }

          RunProgress();
          var strBtnSubmit=document.UploadForm.elements.upload;
            strBtnSubmit.disabled=true;
            strBtnSubmit.value='Vent venligst ...';
          document.UploadForm.submit();
      }
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 12:15 #22
Ja, du får vel stadig en javascript fejl, ikke? i'et i
  document.getElementById('file' + i).style.borderColor='red';
har jo ikke en rigtig værdi på det sted.
Avatar billede moejensen Nybegynder
07. juli 2004 - 12:18 #23
jeg får ingen fejl, men det er nok fordi den ikke når derned til.
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 12:20 #24
Ok, men så er det der hvor du kalder din valideringsfunktion, det går galt. Du
skal gøre som jeg foreslog, og slet ikke sige ...submit() selv.
Avatar billede moejensen Nybegynder
07. juli 2004 - 12:28 #25
min erklæring ser således ud:

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

min min submitknap: <input type="submit" value="        Gem        " name="upload">
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 12:31 #26
07/07-2004 08:58:50
Avatar billede moejensen Nybegynder
07. juli 2004 - 12:42 #27
så har jeg rettet submit(); til return true; men den submitter stadig når der ikke er noget i formen:

function valider(f)
        {
        e = f.elements,files=false,flt=null;
          for(i=0;e.length>i;i++){
            if(e[i].type=='file'&&e[i].value!=""){
              if(!e[i].value.match(/\.(txt|doc|pdf|xls)$/i)){
                flt = (!flt)?e[i]:flt;
              }
              files=true;
            }
          }
          if(flt){
            alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
            flt.select();
            flt.focus();
            document.getElementById('file' + i).style.borderColor='red';
            return false;
          }
          if(!files){
            alert("Der skal vælges mindst én fil");
            f.file1.select();
            f.file1.focus();
            return false;
          }

          RunProgress();
          var strBtnSubmit=document.UploadForm.elements.upload;
            strBtnSubmit.disabled=true;
            strBtnSubmit.value='Vent venligst ...';
          return true;
      }
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 12:47 #28
Læs 07/07-2004 08:58:50 - det er ikke det eneste du skal rette.
Avatar billede moejensen Nybegynder
07. juli 2004 - 12:54 #29
jeg kan ikke lige se hvad jeg mangler.
Avatar billede moejensen Nybegynder
07. juli 2004 - 15:49 #30
Nu har jeg siddet det meste af dagen, og den skide validering virker stadig ikke, men for at andre kan give en hånd med, så kommer her lige et update på hvordan metoden efterhånden ser ud:

        function SubmitForm(f)
        {
            var submit = 'true';
            var count=0;
        for (i=1;i<=9;i++) {
            if (f.elements["file"+i].value!='') {
            count++;
          }
        }
        if (count==0) {
          alert("Der skal vælges mindst én fil");
          f.file1.select();
            f.file1.focus();
            submit = 'false';
            return false;
        }
       
        count=0;
        for (i=1;i<=9;i++) {
            if (f.elements["file"+i].value.match(/\.(txt|doc|pdf|xls)$/i)) {
            alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
                flt.select();
                flt.focus();
                document.getElementById('file' + i).style.borderColor='red';
                submit = 'false';
                return false;
          }
        }
       
        if(submit == 'true')
        {
              RunProgress();
                document.UploadForm.elements.upload.disabled=true;
                document.UploadForm.elements.upload.value='Vent venligst ...';
                return true;
          }
      }

formen: <form method="POST" action="KeKaCMS_FileUpload.asp" enctype="multipart/form-data" name="UploadForm" onsubmit="SubmitForm(this);">
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 15:55 #31
Var dit sprog. Jeg er smuttet.
Avatar billede moejensen Nybegynder
07. juli 2004 - 15:59 #32
Du har sikkert også prøvet at sidde med en fejl en hel dag unden at komme videre, og til sidst bliver man lidt træt af det, det er vel ganske forståligt.
Avatar billede roenving Novice
07. juli 2004 - 20:00 #33
Der er den simple fejl, at du ikke onsubmit returnerer true eller false, og så kunne funktionen slankes ganske betydeligt:

function SubmitForm(f){
  var submit = true,flt=null;
  var count=false;
  for (i=1;i<=9;i++) {
    elm = f.elements["file"+i];
    if (elm.value!='') {
      count = true;
    }
    if (!elm.value.match(/\.(txt|doc|pdf|xls)$/i)) {
      flt = (!flt)?elm:flt;
    }
  }
  if (!count) {
    alert("Der skal vælges mindst én fil");
    f.file1.select();
    f.file1.focus();
    return false;
  }
  if(flt){
    alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
    flt.select();
    flt.focus();
    document.getElementById('file' + i).style.borderColor='red';
    return false;
  }
  RunProgress();
  document.UploadForm.elements.upload.disabled=true;
  document.UploadForm.elements.upload.value='Vent venligst ...';
  return true;
}

formen: <form method="POST" action="KeKaCMS_FileUpload.asp" enctype="multipart/form-data" name="UploadForm" onsubmit="return SubmitForm(this);">
Avatar billede moejensen Nybegynder
07. juli 2004 - 20:13 #34
Den fejler på denne her linje: document.getElementById('file' + i).style.borderColor='red';

Fejl: Object required
Avatar billede roenving Novice
07. juli 2004 - 20:29 #35
Argh ...

  if(flt){
    alert("Der skal vælges filer af typen .txt, .doc, .pdf, .xls");
    flt.select();
    flt.focus();
    flt.style.borderColor='red';
    return false;
  }
Avatar billede moejensen Nybegynder
07. juli 2004 - 20:37 #36
så er den der næsten.

eneste problem er nu at den ved et somt felt ikke får lov til at submitte, grundet at den jo ikke matcher denne her: if (!elm.value.match(/\.(txt|doc|pdf|xls)$/i)), så der skal vel også står at feltet kan være tomt.

kan man også skriver: flt.style.borderSize='2px';
Avatar billede roenving Novice
07. juli 2004 - 20:58 #37
if (!elm.value.match(/\.(txt|doc|pdf|xls)$|/i)) {

-- der er indsat et regexp eller-tegn: |

-- og du kan gøre alt muligt med stylen, men præcis at ændre dimensioner skal du passe på med, da det kan skubbe designet !-)

-- og så hedder det iøvrigt borderWidth !-)
Avatar billede moejensen Nybegynder
07. juli 2004 - 22:30 #38
hmm, nu kommer den ikke op med alertboxen hvis filtypen er forkert :-(
Avatar billede roenving Novice
07. juli 2004 - 22:40 #39
Prøver igen !-)

if (!elm.value.match(/\.(txt|doc|pdf|xls)$|^$/i)) {
Avatar billede moejensen Nybegynder
08. juli 2004 - 07:00 #40
Så er den der... Jubii, Du skal have tusind tak for din store hjælp

du må meget gerne lave et svar :-)
Avatar billede moejensen Nybegynder
08. juli 2004 - 10:34 #41
Lige en helt anden ting, ved du om det er muligt at tjekke en fils størrelse med javascript?
Avatar billede roenving Novice
08. juli 2004 - 12:17 #42
Nej, javascript har ikke adgang til nogle oplysninger om filen, andet end navnet ...

-- og velbekomme '-)
Avatar billede roenving Novice
08. juli 2004 - 12:43 #43
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