Avatar billede feldthaus Nybegynder
22. januar 2004 - 20:38 Der er 16 kommentarer og
2 løsninger

Find filnavn fra upload-form

Hej :)

Jeg skal bruge lidt hjælp til at få lavet en fuld sti til et filnavn om til kun at indeholder filnavnet. Fx skal C:\test\test.txt laves om til test.txt. Det skal også virke under Linux, så /home/feldthaus/test.txt skal altså også laves til test.txt.

Det skal bruges til en upload-form. Når brugeren vælger en fil i <input type="file" name="userfile"> skal filnavnet automatisk indsættes i en <input type="text">. Men altså kun filnavnet - ikke den fulde sti!

http://test.fdsa.dk <-- Der er et eksempel på hvad jeg mener, men stien mangler altså at blive lavet om til kun at indeholde filnavnet.

Jeg er ikke speciel god til javascript, men jeg kan da lidt. Jeg vil i øvrigt gerne vide hvilke onxxxx jeg skal bruge ved <input type="file" name="userfile">, så jeg kan få noget kode udført når brugeren vælger en fil. Jeg har testet lidt og fandt ud af at onclick virkede i Mozilla men ikke i IE hvor onchange kun virkede i IE. Lige nu bruger jeg begge, men er det ikke et bedre alternativ?

På forhånd tak!
Avatar billede feldthaus Nybegynder
22. januar 2004 - 20:41 #1
Jeg kan lige tilføje den metode jeg selv kunne forestille mig ville virke, men jeg kan bare ikke nok javascript til selv at kunne lave det.

Man skal finde ud af om der er \ i filnavnet, hvis der er skal alt indtil den sidste backslash slettes. Samme metode med /.

Ved ikke om det var til meget hjælp, men jeg ville dog lige nævne det :)
Avatar billede grunken Nybegynder
22. januar 2004 - 21:14 #2
hurtig illustration, det er rigtigt at onchange ikke funker i mozilla :-), sikkert grundet en masse sikkerhedsindstillinger :-)

evt. brug onblur, så vil funktionen blive kørt når folk trykker uden for feltet :-)
(og det gør de jo når man trykker på upload :-))


<script type="text/javascript">
function weee(){
f = document.frm.hehe.value
f = f.split("\\")
f = f[f.length-1]
document.frm.haha.value = f;
}
</script>

<form name="frm">
<input type="file" name="hehe" onblur="weee();" onchange="weee();"/><br/>
<input type="text" name="haha"/>
</form>

sidst men ikke mindst kan du køre scriptet onsubmit på din form :-)

<form name="frm" onsubmit="return whee();">

og så placere en "return true" nederst i scriptet :), så er vi helt 100 på at det bliver nået inden formen bliver submittet :-)
Avatar billede grunken Nybegynder
22. januar 2004 - 21:15 #3
whops havde lige overset linux-delen, øjeblik :-)
Avatar billede grunken Nybegynder
22. januar 2004 - 21:19 #4
<script type="text/javascript">
function weee(){
v = document.frm.hehe.value

f = (v.indexOf("\\")==-1 && v.indexOf("/")!=-1)?"/":"\\";

f = v.split(f)
f = f[f.length-1]

document.frm.haha.value = f;
}
</script>

<form name="frm">
<input type="file" name="hehe" onblur="weee();" onchange="weee();"/><br/>
<input type="text" name="haha"/>
</form>
Avatar billede feldthaus Nybegynder
22. januar 2004 - 21:19 #5
For ikke at skabe misforståelser, så SKAL det være lige så snart brugeren har valgt en fil at filnavnet ændres, så brugeren har mulighed for at ændre filnavnet, derfor vil onblur nok ikke virke som jeg vil have det.

Jeg venter lige på du får linux-syntaxen med, så tester jeg :)
Avatar billede feldthaus Nybegynder
22. januar 2004 - 21:21 #6
Nå, jeg er for slow til at poste :)

Jeg tester nu...
Avatar billede grunken Nybegynder
22. januar 2004 - 21:23 #7
:-)

prøv lige ellers må jeg jo komme med en workaround til det andet ;o)
Avatar billede feldthaus Nybegynder
22. januar 2004 - 21:32 #8
Det ser jo ud til at virke, som jeg vil have det :)

Jeg tænkte på om man kunne lave et eller andet smart der gjorde at når weee() bliver kaldt, så finder den en filendelse (fx .jpg) og gemmer den i en variabel. Hvis man så retter i <input type="text">'en, så undersøger den lige om man har ændret ved filendelsen og hvis man har, så kommer den med en advarsel (fx i en 3. editboks). Undersøgelsen skal ikke være case-sensitive (.JpG = .jpg).

Blur virkede vist i øvrigt fint nok i IE, men den ville selvfølgelig ikke virke i Mozilla ;)
Skal jeg bare både have en onblur og onclick eller hvad er smartest?
Avatar billede grunken Nybegynder
22. januar 2004 - 21:39 #9
onblur virker fint i mozilla til windows btw :-)

men så må vi jo hellere lave lidt fusk, men det er jo nok lidt overkill :-)

jeg ville personligt have brugt onblur og onchange, men onblur er jo ligeså fjollet som onclick, hvis de går ned og ændrer i filnavnet, og kommer til at give filfeltet focus igen!, af rene sikkerhedsårsager, har man desværre ikke lige mange muligheder i alle browsere :(

men øjeblik :-) igen!
Avatar billede feldthaus Nybegynder
22. januar 2004 - 21:45 #10
Det er netop derfor jeg ikke har lyst til at arbejde så meget med javascript. Jeg synes mangel på overholdelse af standarder i HTML er slemt, men i Javascript er det endnu værre. Man skal som udvikler være ekstra varsom, fordi brugerne kan bruge en masse forskellige klienter som virker forskelligt, samt brugeren simpelthen kan slå Javascript fra.

Derfor føler jeg mig på tynd is stort set hver gang jeg prøver at kode lidt javascript.

(lige lidt ligegyldig snak mens jeg venter :D )

Onblur virker i Mozilla, men ikke som jeg vil have det. Input-feltet skal opdateres lige så snart man har valgt filen - man skal altså ikke vælge et nyt felt først.
Avatar billede grunken Nybegynder
22. januar 2004 - 22:45 #11
Sorry ventetiden skulle lige noget andet!

det her er nok den bedste løsning :-)

<script type="text/javascript">

var ie = (document.all)?true:false;
var e

function weee(){
v = document.frm.hehe.value
f = (v.indexOf("\\")==-1 && v.indexOf("/")!=-1)?"/":"\\";
f = v.split(f)
f = f[f.length-1]

e = f.split(".")
e = e[e.length-1]

document.frm.haha.value = f;

}

function gete(ext){
ext = ext.split(".")
ext = ext[ext.length-1];

if(ext.toUpperCase() != e.toUpperCase()){
  alert('filtyperne stemmer ikke overens')
  return false
}else
  return true
}

</script>

<form name="frm" onsubmit="return gete(this.haha.value)">
<input type="file" name="hehe"/ onchange="if(ie)weee();" onclick="if(!ie)weee();"><br/>
<input type="text" name="haha"/>
</form>
Avatar billede feldthaus Nybegynder
22. januar 2004 - 23:01 #12
Det virker vist udemærket, men findes der ikke et ON-(et eller andet) tag, der bliver aktiveret hver gang man skriver et bogstav i en editbox?
Avatar billede feldthaus Nybegynder
22. januar 2004 - 23:10 #13
Lige meget, jeg fandt ud af at onkeyup kunne bruges.
Avatar billede feldthaus Nybegynder
22. januar 2004 - 23:14 #14
Men det virker jo fint :)

Tusind tak for hjælpen, smid et svar hvis du vil have dine point.
Avatar billede grunken Nybegynder
22. januar 2004 - 23:34 #15
Jeg ligger et svar :-)

klart at du ville have funktionen udføret med det samme :-)

en anden ting er at du har helt ret med hensyn til at javascript er meget umuligt på tværs af platforme, til det vil jeg dog sige at med introduktionen af DOM, så er det blevet meget nemmere at få resultater der ligner hinanden, i vel og mærke de nyere browsere :-), så jeg syntes egentligt talt bare du skulle komme i gang med at kode noget javascript :o)

og sidst men ikke mindst, så skal man tænke over pointinflationen på eksperten...såeh, jeg nøjes fint med 30 point for dette :o) læg et svar og tag de 70 selv :o)
Avatar billede grunken Nybegynder
22. januar 2004 - 23:34 #16
..
Avatar billede feldthaus Nybegynder
22. januar 2004 - 23:45 #17
Oki, jeg har ikke været herinde i et stykke tid, men jeg har 4.300 point jeg ikke aner hvad jeg skal gøre af, så jeg tænkte at der nok var nogen der havde mere brug for dem end jeg havde... men ok, hvis det er det bedste for eksperten.dk så skal jeg nok beholde en del af mine point :o)

Men 40 point skal du sq have, du har været en stor hjælp ;-)

Men du får mig ikke til at gå aktivt ind i Javascript, jeg synes det er noget rod - bare syntaksen med at man selv bestemmer om man vil bruge ; (semikolon) eller ej kan skræmme mig væk ;)

Tak for hjælpen!
Avatar billede grunken Nybegynder
22. januar 2004 - 23:52 #18
det er jo en ren og skær vanesag :o)

om ikke andet vender man sig da til det når man roder med php, alså at smide semikolen efter alt :o)

det burde man vist så osse holde sig til i js :o)

tak for points :o)
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