/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Validering af felt før submit
Fra : Michael Tillgaard


Dato : 14-02-05 09:28

Jeg har nedenstående form hvor brugeren skal vælge en jpg-fil.

<FORM action="2Files_Save.asp" method="post"
encType="multipart/form-data" name="form2" id="form2"
onSubmit="return validate(this);">
<p><INPUT name="File1" type="File" size="60"><br>
<INPUT type="Submit" value="Upload mit billede"></p></FORM>

Jeg har prøvet mig lidt frem med nedenstående. Men det virker
ikke og opfylder ikke mit krav til, at det kun er jpg filer, der
må sendes. Uanset hvad der vælges kommer fejlmeldingen. Hvad gør
jeg galt?

<script type="text/javascript">
function fokus_paa_felt()
{document.forms['form2'].File1.focus();}
</script>
<script language="javascript" type="text/javascript">
<!--
function validate(f){
   if(!f.File1.value==""){
f.File1.focus();
alert("Du skal skrive et jpg-fil navn. Navnet må ikke
indeholde bogstaverne æ, ø eller å.");
return false;
}
return true;
}
//-->
</script>

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jens Gyldenkærne Cla~ (14-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 14-02-05 12:23

Michael Tillgaard skrev:

> Jeg har prøvet mig lidt frem med nedenstående. Men det virker
> ikke og opfylder ikke mit krav til, at det kun er jpg filer, der
> må sendes. Uanset hvad der vælges kommer fejlmeldingen. Hvad gør
> jeg galt?

Der er stærkt begrænset adgang til fil-input-felter - man kan ikke sætte
værdien og jeg mener heller ikke man kan aflæse værdien med javascript.

Test evt. med en simpel alert om du kan få fat i indholdet af feltet.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (15-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 15-02-05 14:26

Jens Gyldenkærne Clausen skrev:

> Der er stærkt begrænset adgang til fil-input-felter - man kan ikke sætte
> værdien og jeg mener heller ikke man kan aflæse værdien med javascript.

Hm - det kan man så godt alligevel. Se evt. siden her:
<http://www.gyros.dk/usenet/js/formtest.shtml>

Hvis du ikke kan få valideringen til at makke ret, så læg siden online
så vi kan se på det.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Johnny Winther Ronne~ (15-02-2005)
Kommentar
Fra : Johnny Winther Ronne~


Dato : 15-02-05 15:31


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:rf1yct9ms98$.dlg@jcdmfdk.invalid...
> Michael Tillgaard skrev:
>
> Der er stærkt begrænset adgang til fil-input-felter - man kan ikke sætte
> værdien og jeg mener heller ikke man kan aflæse værdien med javascript.
>

Sikke en gang ævl. Maa kan adressere og udtrække og indsætte værdier i alle
felter i en formular samt i alle elementer der har en value atribut.

Alle html elemnter kan aflæses på samme måde hvis man vil have felter med en
id eller en name definition så kalder man simpelthen dem ellers kan
document.all[i] bruges til at adressere hvad som helst med.

Jeg kunne godt tænke mig at opfordre dig til at kigge på to eksempler på en
onlineshop som du kan køre på en helt amindelig internetkonto uden ASP, PHP,
SQL og så videre inklusiv betalingsmoduler. De er primitive ja, men de er
osgå gode eksempler på hvor kraftfuldt JavaSript er, når man sættet sig ind
i det.

Du kan finde dem på download.com og de hedder henholds "Fast eCart" og
"Apriori Paypal". Begge demonstrerer i øvrigt det, du siger ikke kan lade
sig gøre. Og de kan også illustrere, at man med et rammesæt og JavaScript
kan ændre et statisk websted fra stateless til statefull gennem parameter
overførsel mellem rammer.

Med venlig hilsen
Johnny Winther Ronnenberg



Jens Gyldenkærne Cla~ (15-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 15-02-05 16:00

Johnny Winther Ronnenberg skrev:

> Sikke en gang ævl. Maa kan adressere og udtrække og indsætte værdier i alle
> felter i en formular samt i alle elementer der har en value atribut.

Nå nå. Kan du vise mig en side hvor man kan sætte indholdet af et
filinput via javascript?

Alternativt kan du forklare mig hvor mit eget eksempel her ikke virker:

<http://www.gyros.dk/usenet/js/formtest.shtml>

Man kan fint sætte værdier i tekstfelter, i selectbokse mv. - men *ikke*
i filinputs.

Firefox melder følgende i javascriptkonsollen:

Error: uncaught exception: [Exception... "Security error" code: "1000"
nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location:
"<unknown>"]

IE og Opera giver ikke nogen fejl, men de ændrer ligesom Firefox heller
ikke i filinputtet.


> Alle html elemnter kan aflæses på samme måde hvis man vil have felter med en
> id eller en name definition så kalder man simpelthen dem ellers kan
> document.all[i] bruges til at adressere hvad som helst med.

Document.all er en MS-opfindelse, og browserunderstøttelsen af den er
ikke optimal.


> Begge demonstrerer i øvrigt det, du siger ikke kan lade sig gøre.

Jeg har aldrig betvivlet muligheden for at tilgå almindelige formfelter.
Det jeg skrev gælder specifikt for filinputfelter.

Mit umiddelbare indtryk var at filinputs var helt afkoblet mht. tilgang
via javascript, men som jeg skrev for en time siden, har jeg nu testet
mig frem til at man godt kan *aflæse* værdien på et filinputfelt. Men
ingen af de tre browsere jeg har testet med (Firefox, IE, Opera) giver
mulighed for at sætte indholdet af et filinput med javascript.

Årsagen hertil er sikkerhedsrelateret. Hvis en ondsindet webside kan
gætte sig til placeringen af en fil med følsomme oplysninger (fx en fil
med adgangskoder eller bankoplysninger), ville den med et javascript
vælge denne fil og submitte den til siden.

> Og de kan også illustrere, at man med et rammesæt og JavaScript
> kan ændre et statisk websted fra stateless til statefull gennem parameter
> overførsel mellem rammer.

Hvilken relevans har det i forhold til adgangsrestriktioner på
filinputs?

Jeg er ikke spor i tvivl om at javascript er et særdeles kraftfuldt
sprog - men browserne har af samme grund spærret for nogle af de dele
der let kan misbruges.


--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Johnny Winther Ronne~ (15-02-2005)
Kommentar
Fra : Johnny Winther Ronne~


Dato : 15-02-05 17:11


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:vgzu1yz3s7ok$.dlg@jcdmfdk.invalid...
> Johnny Winther Ronnenberg skrev:
>
> > Sikke en gang ævl. Maa kan adressere og udtrække og indsætte værdier i
alle
> > felter i en formular samt i alle elementer der har en value atribut.
>
> Nå nå. Kan du vise mig en side hvor man kan sætte indholdet af et
> filinput via javascript?
>
> Alternativt kan du forklare mig hvor mit eget eksempel her ikke virker:
>
> <http://www.gyros.dk/usenet/js/formtest.shtml>
>
> Man kan fint sætte værdier i tekstfelter, i selectbokse mv. - men *ikke*
> i filinputs.

> Document.all er en MS-opfindelse, og browserunderstøttelsen af den er
> ikke optimal.
>

Den er medtaget i standarden så vidt jeg husker fra 1.3 måske 1.2

>
> Mit umiddelbare indtryk var at filinputs var helt afkoblet mht. tilgang
> via javascript, men som jeg skrev for en time siden, har jeg nu testet
> mig frem til at man godt kan *aflæse* værdien på et filinputfelt. Men
> ingen af de tre browsere jeg har testet med (Firefox, IE, Opera) giver
> mulighed for at sætte indholdet af et filinput med javascript.
>
> Årsagen hertil er sikkerhedsrelateret. Hvis en ondsindet webside kan
> gætte sig til placeringen af en fil med følsomme oplysninger (fx en fil
> med adgangskoder eller bankoplysninger), ville den med et javascript
> vælge denne fil og submitte den til siden.
>

Fra siden
<input type="file" id="fil" name="fil" />
og
<input type="button" value="Sæt indhold af filfelt = 'test.jpg'"
onclick="document.forms[0].fil.value = 'test.jpg'" />

Så vidt jeg kan se er den eneste grund til det ikke virker, er at input er
defineret som en fil, men det du prøver er at tillføje en utypet streng.
Det burde være gyldigt med typekonvertering, men det giver undertiden nogle
mærkelige fejl.

Mit bedste bud er at bruge filesystem objektet til at sætte value med. Det
er lidt snavset, men det burde kunne lade sig gøre.

Mit næstbedste bud er du indsætter filnavnet alene og ikke en fuld sti. Men
den tror jeg lidt mindre på.

Bortset fra det gik det indledende spørgsmål på validering af filnavnet,
hvilket var hvad jeg forholdt mig konkret til.

Med venlig hilsen
Johnny Winther Ronnenberg



Jens Gyldenkærne Cla~ (15-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 15-02-05 23:56

Johnny Winther Ronnenberg skrev:

>> Document.all er en MS-opfindelse, og browserunderstøttelsen
>> af den er ikke optimal.

> Den er medtaget i standarden så vidt jeg husker fra 1.3 måske
> 1.2

Document-egenskaber hører til DOM og er ikke direkte relateret
til javascriptversioner. I W3's DOM-specifikationer har document
*ikke* nogen .all-attribut:

DOM 1:
<http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#i-Document>

DOM 2:
<http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#i-Document>

Se evt. også siden her om forskellige DOM-niveauer
<http://www.quirksmode.org/js/dom0.html>

document.all stammer ligesom Netscape-varianten document.layers
fra version 4-browsere, hvor Microsoft og Netscape opfandt hver
deres metode til at tilgå div-elementer. Først senere blev W3's
første udgave af DOM - DOM Level 1 - implementeret.

Du kan også se hvad Microsoft selv skriver om document.all

<http://msdn.microsoft.com/workshop/author/dhtml/reference/collections/all.asp>

- og sammenlign så med hvad de skriver om getElementById

<http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/getelementbyid.asp>

Under document.all, Standards Information hedder det:

There is no public standard that applies to this collection.


> Så vidt jeg kan se er den eneste grund til det ikke virker, er
> at input er defineret som en fil, men det du prøver er at
> tillføje en utypet streng.

Value-feltet på en filinput indeholder *navnet* på en fil - ikke
selve filen. Jeg kan ikke se at typekonvertering vil hjælpe.


> Mit bedste bud er at bruge filesystem objektet til at sætte
> value med. Det er lidt snavset, men det burde kunne lade sig
> gøre.

Du er velkommen til at prøve. Indtil da vil jeg holde på at
Value-parameteren til filinputs er skrivebeskyttet.


> Bortset fra det gik det indledende spørgsmål på validering af
> filnavnet, hvilket var hvad jeg forholdt mig konkret til.

Tja - du viste en funktion der var testet, bare ikke på en form
som den skulle bruges til.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Johnny Winther Ronne~ (15-02-2005)
Kommentar
Fra : Johnny Winther Ronne~


Dato : 15-02-05 13:59


"Michael Tillgaard" <michael.tillgaard@skolekom.dk> skrev i en meddelelse
news:42106102$0$29277$14726298@news.sunsite.dk...
> Jeg har nedenstående form hvor brugeren skal vælge en jpg-fil.
>
> <FORM action="2Files_Save.asp" method="post"
> encType="multipart/form-data" name="form2" id="form2"
> onSubmit="return validate(this);">
> <p><INPUT name="File1" type="File" size="60"><br>
> <INPUT type="Submit" value="Upload mit billede"></p></FORM>

<script language="javascript" type="text/javascript">
<!--
function find(s,c)
{
return(s.search(c));
}

function validate(f)
{
var infile = new String();
infile = f;
var filetype = new String("jpg");
var temp;
if (find(infile,"æ")==false || find(infile,"Æ")==false )
{
alert("ugyldige tegn æøå");
return false;
}
if (find(infile,"ø")==false || find(infile,"Ø")==false )
{
alert("ugyldige tegn æøå");
return false;
}
if (find(infile,"å")==false || find(infile,"Å")==false )
{
alert("ugyldige tegn æøå");
return false;
}

temp = infile.substr(infile.length-3,3);
if (temp!=filetype)
{
alert("kun jpg filer");
return false;
}
document.forms['form2'].submit();
}// end function validate

validate("æbler.jpg");
validate("bananer.exe");
validate("document.forms['form2'].incomingfile")
//-->
</script>

Kun test uden brug af form men virker ellers.

Med venlig hilsen
Johnny Winther Ronnenberg



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste