Avatar billede mtrolle Nybegynder
04. oktober 2005 - 21:26 Der er 22 kommentarer og
1 løsning

onsubmit funktion

Hej.

Jeg har en funktion, jeg gerne vil have kørt via <form onsubmit="submitter(); return false;" ...>
Den ser således ud.

function submitter() {
    error = 0;

    if((document.getElementById('titel_1').value=='') && !(document.getElementById('file_1').value=='') && (error==0)) {
        alert('Du mangler at give billede 1 en titel!');
        document.getElementById('titel_1').focus();
        error = 1;       
    }
    if((document.getElementById('titel_2').value=='') && !(document.getElementById('file_2').value=='') && (error==0)) {
        alert('Du mangler at give billede 2 en titel!');
        document.getElementById('titel_2').focus();
        error = 1;       
    }
    if((document.getElementById('titel_3').value=='') && !(document.getElementById('file_3').value=='') && (error==0)) {
        alert('Du mangler at give billede 3 en titel!');
        document.getElementById('titel_3').focus();
        error = 1;       
    }
    if((document.getElementById('titel_4').value=='') && !(document.getElementById('file_4').value=='') && (error==0)) {
        alert('Du mangler at give billede 4 en titel!');
        document.getElementById('titel_4').focus();
        error = 1;       
    }
    if((document.getElementById('titel_5').value=='') && !(document.getElementById('file_5').value=='') && (error==0)) {
        alert('Du mangler at give billede 5 en titel!');
        document.getElementById('titel_5').focus();
        error = 1;       
    }
   
    if(error == 1) {
        document.getElementById('uploadBefore').style.display='none';
        document.getElementById('uploadNow').style.display='block';
        document.getElementById('uploadNowTop').style.display='block';
        document.getElementById('formen').submit();
    } else {
        return false;
    }
}

Den virker bare ikke i safari og Firefox :( alle Id'er som der henvises til findes. Men det er som om den ikke kan finde ud af det med return false
Det virker tilsyneladende fint i IE.
Avatar billede horsmark Nybegynder
04. oktober 2005 - 21:29 #1
<form onsubmit="return submitter();">
Avatar billede horsmark Nybegynder
04. oktober 2005 - 21:32 #2
OG så vil det være en god idé at isolere document.getElementById i en funktion = læsevenlighed :-)

function getEle( eleId ){
  if( typeof( eleId ) == "undefined" ){
    alert("kodehodefejl: id´et " + eleId + " findes ikke!")
    return false
  }
  return document.getElementById(eleId)
}
Avatar billede horsmark Nybegynder
04. oktober 2005 - 21:37 #3
function submitter() {
    error = 0;

    if( isEmpty('titel_1') && isEmpty('file_1') && error==0)) {
        alert('Du mangler at give billede 1 en titel!');
        getEle('titel_1').focus();
        error = 1;     
    }

    ...osv er masse validering ...
 
    if(error == 1) {
        getEle('uploadBefore').style.display='none';
        getEle('uploadNow').style.display='block';
        getEle('uploadNowTop').style.display='block';
        getEle('formen').submit();
    } else {
        return false;
    }
}

function getEle( eleId ){
  if( typeof( eleId ) == "undefined" ){
    alert("kodehodefejl: id´et " + eleId + " findes ikke!")
    return false
  }
  return document.getElementById(eleId)
}

function isEmpty( eleId ){
  if( getEle(eleId).value == "") return true
  return false
}
Avatar billede mtrolle Nybegynder
04. oktober 2005 - 21:38 #4
Scriptet behøver jo ikke være læsevenligt :)
Bare det virker og er optimalt. Ser ikke hvad jeg vinder på at lave en funktion til det. (Rent performence mæssigt altså).

Hvad angår ændringen i onsubmit="" hjalp det mig ikke.
Avatar billede horsmark Nybegynder
04. oktober 2005 - 21:38 #5
så er det pludseligt laaaangt nemmere at gennemskue. Når der er for megen kode der går igen giver det "støj" og gør koden svær at gennemskue for både en selv og mange andre ;-)

ergo undgå støj
Avatar billede horsmark Nybegynder
04. oktober 2005 - 21:39 #6
ændre       
  document.getElementById('formen').submit();
til
  return true
Avatar billede mtrolle Nybegynder
04. oktober 2005 - 21:40 #7
Det er måske værd at nævne, at jeg både i safari og firefox får en alert, men at den submitter alligevel...
Avatar billede mtrolle Nybegynder
04. oktober 2005 - 21:40 #8
ændring til return true har jeg lige prøvet uden gavn
Avatar billede horsmark Nybegynder
04. oktober 2005 - 21:41 #9
og så sætter du error = 1 i alle valideringsrunder når der opstår fejl og til sidst chekcer du om fejlen er 1 og hvis ja submit ??

?-|
Avatar billede horsmark Nybegynder
04. oktober 2005 - 21:44 #10
function submitter() {
var msgAlert = ""
if( isEmpty('titel_1') ){
  msgAlert += "Du mangler at udfylde titel 1\n"
}

if( isEmpty('titel_2') ){
  msgAlert += "Du mangler at udfylde titel 2\n"
}

..osv

if( msgAlert == "" ){
  return true //Ingen fejl = submit
} else {
  alert( msgAlert ) //Fejl fundet alert brugeren og returner false ergo submit _ikke_
  return false
}
Avatar billede mtrolle Nybegynder
04. oktober 2005 - 22:08 #11
Har nu prøvet:

function TjekForm() {
    msgAlert = "";

    if((document.getElementById('titel_1').value=='') && !(document.getElementById('file_1').value=='')) {
        msgAlert = "Du mangler at give billede 1 en titel!";
        msgFocus = "titel_1";
    }
    if((document.getElementById('titel_2').value=='') && !(document.getElementById('file_2').value=='')) {
        msgAlert += "Du mangler at give billede 2 en titel!";
        msgFocus = "titel_2";
    }
    if((document.getElementById('titel_3').value=='') && !(document.getElementById('file_3').value=='')) {
        msgAlert += "Du mangler at give billede 3 en titel!";
        msgFocus = "titel_3";
    }
    if((document.getElementById('titel_4').value=='') && !(document.getElementById('file_4').value=='')) {
        msgAlert += "Du mangler at give billede 4 en titel!";
        msgFocus = "titel_4";
    }
    if((document.getElementById('titel_5').value=='') && !(document.getElementById('file_5').value=='')) {
        msgAlert += "Du mangler at give billede 4 en titel!";
        msgFocus = "titel_4";
    }

    if(msgAlert == "") {
        document.getElementById('uploadBefore').style.display='none';
        document.getElementById('uploadNow').style.display='block';
        document.getElementById('uploadNowTop').style.display='block';
        return true;
    } else {
        alert(msgAlert);
        document.getElementById(msgFocus).focus();
        return false;
    }
}

i formen skriver jeg onsubmit="return TjekForm();"
Avatar billede horsmark Nybegynder
04. oktober 2005 - 22:14 #12
og hvad får du af fejl ?

husk at sætte [\n] bagest i msgAlert da dette betyder linieskift i alertboksen
Avatar billede mtrolle Nybegynder
04. oktober 2005 - 22:16 #13
Ja, det havde jeg lige glemt det med linjeskift.

Jeg får ingen fejl, den submitter bare. Før jeg ændrede til det med msgAlert, så fik jeg dog min alert inden den submittede.
Avatar billede mtrolle Nybegynder
04. oktober 2005 - 22:33 #14
Det virker fint i IE, men ikke safari og firefox. Tror det har noget med return false tingen at gøre.
Avatar billede olebole Juniormester
04. oktober 2005 - 23:58 #15
<ole>

Prøv med et link til siden, for det må være et andet sted, du laver fejl.

F.eks. forsøger du forhåbentlig ikke at adressere dine felter med 'getElementById' uden at give dem en ID? Det er kun IE, der er tåbelig nok til at bruge en name-attribut. Alle andre browsere kræver - i fuld overensstemmelse med standarden for ECMA-DOM bindings - en ID  :)

/mvh
</bole>
Avatar billede mtrolle Nybegynder
05. oktober 2005 - 07:07 #16
Jeg husker naturligvis ID. Da systemet er lukket med login m.v. er dette nok lettere:

<script language="JavaScript">
function TjekForm() {
    msgAlert = "";

    if((document.getElementById('titel_1').value=='') && !(document.getElementById('file_1').value=='')) {
        msgAlert = "Du mangler at give billede 1 en titel!";
        msgFocus = "titel_1";
    }
    if((document.getElementById('titel_2').value=='') && !(document.getElementById('file_2').value=='')) {
        msgAlert += "Du mangler at give billede 2 en titel!";
        msgFocus = "titel_2";
    }
    if((document.getElementById('titel_3').value=='') && !(document.getElementById('file_3').value=='')) {
        msgAlert += "Du mangler at give billede 3 en titel!";
        msgFocus = "titel_3";
    }
    if((document.getElementById('titel_4').value=='') && !(document.getElementById('file_4').value=='')) {
        msgAlert += "Du mangler at give billede 4 en titel!";
        msgFocus = "titel_4";
    }
    if((document.getElementById('titel_5').value=='') && !(document.getElementById('file_5').value=='')) {
        msgAlert += "Du mangler at give billede 4 en titel!";
        msgFocus = "titel_4";
    }

    if(msgAlert == "") {
        document.getElementById('uploadBefore').style.display='none';
        document.getElementById('uploadNow').style.display='block';
        document.getElementById('uploadNowTop').style.display='block';
        return true;
    } else {
        alert(msgAlert);
        document.getElementById(msgFocus).focus();
        return false;
    }
}
</script>

    <form action="/scripts/upload.php" method="post" enctype="multipart/form-data" style="margin:0px;" id="formen" onsubmit="return TjekForm(); return false;">
    <select name="folder"><option value="28">En god dag</option><option value="27">Ferie 2005</option><option value="1">Generel</option><option value="31">Musik</option></select>
    <div class="header">Vælg billeder</div>
    <div style="display:none;" id="uploadNowTop"><h1>Dine billeder uploades nu!</h1><p>Vent venligst...</p></div>
    <table style="width:100%;">
        <tr>
            <td><p style="font-weight:bold; margin:0px;">Vælg billede</p></td>
            <td><p style="font-weight:bold; margin:0px;">Giv billedet en titel</p></td>
            <td><p style="font-weight:bold; margin:0px;">Ønsker du vurderinger?</p></td>
        </tr>
       
        <tr>
            <td><input name="userfile_1" id="file_1" type="file" /></td>
            <td><input name="titel_1" id="titel_1" type="text" /></td>
            <td><p style="margin:0px;">Ja
            <input type="radio" name="rating_1" value="1" checked="checked" /> Nej
            <input type="radio" name="rating_1" value="0" /></p></td>
        </tr>
        <tr>
            <td><input name="userfile_2" id="file_2" type="file" /></td>
            <td><input name="titel_2" id="titel_1" type="text" /></td>
            <td><p style="margin:0px;">Ja
            <input type="radio" name="rating_2" value="1" checked="checked" /> Nej
            <input type="radio" name="rating_2" value="0" /></p></td>
        </tr>
        <tr>
            <td><input name="userfile_3" id="file_3" type="file" /></td>
            <td><input name="titel_3" id="titel_3" type="text" /></td>
            <td><p style="margin:0px;">Ja
            <input type="radio" name="rating_3" value="1" checked="checked" /> Nej
            <input type="radio" name="rating_3" value="0" /></p></td>
        </tr>
        <tr>
            <td><input name="userfile_4" id="file_4" type="file" /></td>
            <td><input name="titel_4" id="titel_4" type="text" /></td>
            <td><p style="margin:0px;">Ja
            <input type="radio" name="rating_4" value="1" checked="checked" /> Nej
            <input type="radio" name="rating_4" value="0" /></p></td>
        </tr>
        <tr>
            <td><input name="userfile_5" id="file_5" type="file" /></td>
            <td><input name="titel_5" id="titel_5" type="text" /></td>
            <td><p style="margin:0px;">Ja
            <input type="radio" name="rating_5" value="1" checked="checked" /> Nej
            <input type="radio" name="rating_5" value="0" /></p></td>
        </tr>
       
    </table>
    <div style="display:none;" id="uploadNow"><h1>Dine billeder uploades nu!</h1><p>Vent venligst...</p></div>
    <div id="uploadBefore" style="margin:0px; text-align:center; margin-top:10px;">
    <input type="submit" value="Upload" />
    </diV>
Avatar billede olebole Juniormester
06. oktober 2005 - 16:33 #17
Prøv:
  onsubmit="return TjekForm();"  ;o)
Avatar billede mtrolle Nybegynder
06. oktober 2005 - 16:41 #18
har jeg også prøvet.
Avatar billede mtrolle Nybegynder
10. oktober 2005 - 22:21 #19
Funktionen findes online på www.fotoupload.dk - det kræver dog en profil for at kunne uploade.
klik på Upload nye billeder i menuen.
Avatar billede mtrolle Nybegynder
11. oktober 2005 - 22:02 #20
Har nu prøvet at koge funktionen lidt ned, men lige meget hjælper det.


function TjekForm() {
    msgAlert = "";
   
    for(i=1; i<=5; i++) {
        if((document.getElementById('titel_'+i).value=='') && !(document.getElementById('file_'+i).value=='')) {
            msgAlert += "Du mangler at give billede "+ i +" en titel!\n";
            msgFocus = "titel_"+i;
        }
    }
    if(msgAlert == "") {
        document.getElementById('uploadBefore').style.display='none';
        document.getElementById('uploadNow').style.display='block';
        document.getElementById('uploadNowTop').style.display='block';
        document.getElementById('formen').submit();
        dot();
    } else {
        alert(msgAlert);
        document.getElementById(msgFocus).focus();
        return false;
    }
}
Avatar billede psykochicken Nybegynder
18. oktober 2005 - 12:57 #21
Det virker fint her - alle billed/titel-fejl kommer i alerten og focus sættes på sidste titel-fejl:
<script type="text/javascript">
function TjekForm() {
var tekst = "";
    for(i=1; i<=5; i++) {
    var a = document.getElementById("file_"+i);
    var b = document.getElementById("titel_"+i);
      if(!a.value=="" && b.value=="") {
        tekst += "Du mangler at give billede "+ i +" en titel!\n";
    minfocus = "titel_"+i;
      }
    }
    if(tekst !== ""){
      alert(tekst);
      document.getElementById(minfocus).focus();
      return false;
    }
    else {
    document.getElementById('uploadBefore').style.display='none';
        document.getElementById('uploadNow').style.display='block';
        document.getElementById('uploadNowTop').style.display='block';
        document.getElementById('formen').submit();
        dot();
    }
}
</script>

/psc :)
Avatar billede mtrolle Nybegynder
17. november 2005 - 13:30 #22
olebole>
smid et svar. Jeg finder det fair dig og horsmark deler point.
Avatar billede olebole Juniormester
18. november 2005 - 14:38 #23
Det er jeg ikke sikker på, jeg er enig i  :)
Jeg er igang med et større projekt for tiden - og har ikke haft så megen tid til at holde øje med spm, jeg deltager i. Derfor har jeg vist ikke hjulpet så meget her - og det ser ikke ud til, jeg har bidraget til en regulær løsning.
I dette tilfælde vil jeg gerne holde mig udenfor pointene ... men tak for tanken  ;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