IvarMedlem sedan aug. 2002218 inlägg Hej!
För att kola bild bredden och höjden i klientdatorn använder jag denna JavaScriptkoden och det funkar bra, då får man en alert meddelande och då måste man trycka OK för att bläddra igen efter passande bildstorlek osv. Vad jag vill uppnå är att med document.location.reload() ladda om bara den fält som man bläddrar efter fil men som det är nu laddas om hela formuläret men hur fixar jag det?
Kod:
<script language="JavaScript">
function imgSize(obj, w, h){
var imgpath = obj.value;
var imgTemp = new Image();
imgTemp.src = imgpath;
// -- kontrollera hur bred bilden är --
if (imgTemp.width >= w){
alert('Bilden är för bred.\nDen får max. vara ' + w + ' pixlar bred.\n\nVälj en annan bild.');
document.location.reload();
// -- kontrollera bildens höjd --
}else if(imgTemp.height >= h){
alert('Bilden är för hög.\nDen får max. vara ' + h + ' pixlar hög.\n\nVälj en annan bild.');
document.location.reload();
}
imgTemp.src = '';
}
</script>
<input type="FILE" size="35" name="blob" style="border: 1px solid #7A96E0" onChange="imgSize(this, 500, 500);">
/Ivar
Hur menar du med ladda om enbart det fältet? Du menar att du vill rensa det?
ta bort document.location.reload() raden och ersätt med:
obj.value = "";
IvarMedlem sedan aug. 2002218 inlägg Hej!
PepeJeria Ja jag menar att rensa fältet alltså tvinga annonsören att välja en annan bild.
Jag testade med obj.Value=””; men det funkar inte. Förslag?
/Ivar
oj, det blir security error, när man försöker sätta value:t. Inte så konstigt egentligen, för då skulle man ju kunna sätta denna till att ladda upp privat information.
Detta är dock, tyvärr inte svaret på din fråga.
Nu när jag tänkt efter lite, lösningen är att man inte kan submitta formuläret när man lagt ditt för stor bild, en alert dyker upp som säger detta + att man säger "försök med annan" typ.
För detta går, användaren kan trycka på browse igen för att ändra filen. Sen körs scriptet igen, är bilden inom storleken du vill ha så submittar du formuläret...
IvarMedlem sedan aug. 2002218 inlägg Det låter bra PepeJeria har du kod förslag?
Följande får jag inte att fungera i Mozilla (width och height returnerar alltid 0), men det funkar i IE.
Fast något att börja med i alla fall, du kan ju testa dig fram.
Tex måste du även kolla om det är en bild man laddar upp väl? osv osv...
<script type="text/javascript">
function imgSize(form, w, h){
var imgpath = form.blob.value;
var imgTemp = new Image();
imgTemp.src = imgpath;
if(imgTemp.width >= w || imgTemp.height >= h)
{
alert("Bildens storlek stämmer inte.\nDen får max. vara " + w + " pixlar bred och " + h + " pixlar hög.\n\nVälj en annan bild.");
imgTemp.src = '';
return;
}
form.submit();
}
</script>
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" size="35" name="blob" style="border: 1px solid #7A96E0">
<input type="button" onClick="imgSize(this.form, 500, 500);" value="Submit form">
</form>
IvarMedlem sedan aug. 2002218 inlägg Hmm!
Kan man ha två funktioner i samma formulär?
Då funkar inte valideringen. Grrrr!!
/Ivar
IvarMedlem sedan aug. 2002218 inlägg Om man har två funktioner hur ska jag fixa detta:
Kod
<form action="outputfile.asp" method="post" enctype="multipart/form-data" name="mailform" onSubmit="return telluser();imgSize(this.file,500,500,100000);" >
som det är nu funkar bara return telluser()???
/Ivar
Vad har du i telluser? Kan du inte flytta upp imgSize till telluser?
dectgapMedlem sedan sep. 20021 655 inlägg Testa med
onSubmit="return (telluser() && imgSize(this,500,500,100000));"
Då måste du dock ändra lite i imgSize:
<script type="text/javascript">
function imgSize(form, w, h){
var imgpath = form.blob.value;
var imgTemp = new Image();
imgTemp.src = imgpath;
if(imgTemp.width >= w || imgTemp.height >= h)
{
alert("Bildens storlek stämmer inte.\nDen får max. vara " + w + " pixlar bred och " + h + " pixlar hög.\n\nVälj en annan bild.");
imgTemp.src = '';
return false;
}
return true;
}
</script>
IvarMedlem sedan aug. 2002218 inlägg Flytta imgSize till telluser??
Men hur ser din telluser funktion ut? returnerar den oxå true när allt uppfyllts? Skadar inte att posta all kod...
IvarMedlem sedan aug. 2002218 inlägg Här är koden för funktion telluser()
<script language="JavaScript">
<!--
function telluser() {
retval = true;
if (document.mailform.item.value.length < 1) {
alert("Du måste skriva ett föremål.");
retval = false;
}
if (document.mailform.description.value.length < 1) {
alert("Du måste skriva ett beskrivning.");
retval = false;
}
if (document.mailform.lan.value.length < 1) {
alert("Du måste välja ett län.");
retval = false;
}
if (document.mailform.category.value.length < 1) {
alert("Du måste välja kategori.");
retval = false;
}
if (document.mailform.email.value.length < 1) {
alert("Du måste skriva ett fungerande e-mail.");
retval = false;
}
if (document.mailform.password.value.length < 1) {
alert("Du måste skriva ett lösenord.");
retval = false;
}
return retval;
}
// -->
</script>
och kod för funktion imgSize
<script type="text/javascript">
function imgSize(form, w, h){
var imgpath = form.blob.value;
var imgTemp = new Image();
imgTemp.src = imgpath;
if(imgTemp.width >= w || imgTemp.height >= h)
{
alert("Bildens storlek stämmer inte.\nDen får max. vara " + w + " pixlar bred och " + h + " pixlar hög.\n\nVälj en annan bild.");
imgTemp.src = '';
return false;
}
return true;
}
</script>
<form action="outputfile.asp" method="post" enctype="multipart/form-data" name="mailform" onSubmit="return telluser();imgSize(this,500,500,100000);" >
IvarMedlem sedan aug. 2002218 inlägg PepeJeria kan Du fixa det?
/Ivar
Det bästa är nog att baka ihop båda funktionerna till en funktion. Gjorde det och hoppas att det nu funkar. Har inte testat, men detta borde ge dig en ide hur du får det att fungera
<script type="text/javascript">
function telluser(form, w, h)
{
retval = true;
if (document.mailform.item.value.length < 1)
{
alert("Du måste skriva ett föremål.");
retval = false;
}
if (document.mailform.description.value.length < 1)
{
alert("Du måste skriva ett beskrivning.");
retval = false;
}
if (document.mailform.lan.value.length < 1)
{
alert("Du måste välja ett län.");
retval = false;
}
if (document.mailform.category.value.length < 1)
{
alert("Du måste välja kategori.");
retval = false;
}
if (document.mailform.email.value.length < 1)
{
alert("Du måste skriva ett fungerande e-mail.");
retval = false;
}
if (document.mailform.password.value.length < 1)
{
alert("Du måste skriva ett lösenord.");
retval = false;
}
var imgpath = form.blob.value;
var imgTemp = new Image();
imgTemp.src = imgpath;
if(imgTemp.width >= w || imgTemp.height >= h)
{
alert("Bildens storlek stämmer inte.\nDen får max. vara " + w + " pixlar bred och " + h + " pixlar hög.\n\nVälj en annan bild.");
imgTemp.src = '';
retval = false
}
return retval;
}
</script>
IvarMedlem sedan aug. 2002218 inlägg Tack PepeJeria funkar fint.
/Ivar