Avatar billede larssmile Nybegynder
04. oktober 2001 - 08:01 Der er 10 kommentarer

Gode gamle validering af felt men med en twist

Hej alle eksperter så er den gal igen :-)

Jeg er helt ny i javascript og håber at i han hjælpe.

I spørgsmål 115613 der blev svaret på bedste ekspertstil nu kunne jeg godt tænke mig at udvidde med følgende funktioner:

Der tages fire parametere, (udover this) min, max,  faktor og beregnesifelt som benyttes til følgende:

1) Tjek at der kun er heltal i feltet, hvis ikke så alert med \"ikke gyldig tal\".
2) Tallet må ikke overstige max, hvis det gør dette så alert med \"må ikke overstige : max\"
3) Tallet må ikke være mindre end min hvis det er det så alert med \"må ikke være mindre end min\"
3) hvis tallet klare ovenstående validering så gang det med faktor og gem det i beregnesifelt.

Som det fremgår i spgs. 115613 så skal curseren stille sig i det felt der er fejl i (eller rettere blive i det)

Håber at der er nogle der kan svare på dette eller har noget ligende så jeg kan se hvordan man gør det.
:-)

Mange Tak
Lars
Avatar billede senj Nybegynder
04. oktober 2001 - 09:29 #1
Jeg har lavet et eks. hvor valideringen du ønsker findes på et felt pr. validering, så kan bedre se hvad der sker!

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<script language=\"JavaScript\">

function check()
{
if(document.minform.f2.value == \"\" || document.minform.f3.value == \"\")
{
alert(\"Felt 2 og 3 skal være udfyldt før der kan begregnes\")
document.minform.f2.focus();
return false;
}


if(isNaN(document.minform.f1.value))
{
    alert(\"Feltet skal være et heltal\");
    document.minform.f1.focus();
    return false;
}

var f2 = parseInt(document.minform.f2.value)
if(f2 > 10)
{
    alert(\"Feltet må ikke være større end 10\")
    document.minform.f2.focus();
    return false;
}
var f3 = parseInt(document.minform.f2.value)
if(f3 < 5)
{
    alert(\"Værdien skal være større end 5\");
    document.minform.f3.focus();
    return false;   
}

resultat = f2 + f3;
document.minform.f4.value=resultat;
}


</script>


<form name = \"minform\">
Heltal:<input type = \"text\" name = \"f1\" size = \"8\">
Max 10<input type = \"text\" name = \"f2\" size = \"8\">
Min 5<input type = \"text\" name = \"f3\" size = \"8\">
Beregningsfelst<input type = \"text\" name = \"f4\" size = \"8\">
<input type = \"button\" value = \"beregn\" onClick=\"java script:check()\">
</form>


</body>
</html>


/senj
Avatar billede jakoba Nybegynder
04. oktober 2001 - 10:50 #2
senj >> jeg tror felterne til test 1, 2 og 3 skulle være samme felt

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html>
<head>
    <title>teste felt</title>
</head>
<body>

<script language=\"JavaScript\"> <!--

function checkF1( min, max, faktor, destnavn ) {

// jeg har fjenet disse 2 tests da RegExp testen gør det samme og er lidt sikrere.
//    if ( document.minform.f1.value == \"\" ) { // test1
//        alert(\"Feltet skal være udfyldes før der kan begregnes\")
//        document.minform.f1.focus();
//        return false;
//    }
//
//    if( isNaN(document.minform.f1.value) ) {
//        alert(\"Feltet skal være et heltal\");
//        document.minform.f1.focus();
//        return false;
//    }

              // test om hele feltet består at cifre
              //  /^\\d+$/  er en regular expression (RegExp)
    if ( !/^\\d+$/.test( document.minform.f1.value ) ) {
        alert(\"Feltet skal være et heltal\");
        document.minform.f1.focus();
        return false;
    }

    var f1verdi = parseInt(document.minform.f1.value);

    if ( f1verdi > 10 ) { // test om værdien er større end 10
        alert(\"Feltet må ikke være større end 10\")
        document.minform.f1.focus();
        return false;
    }

    if (f1verdi < 5) {    // test om værdien er mindre end 5
        alert(\"Værdien må ikke være mindre end end 5\");
        document.minform.f1.focus();
        return false; 
    }

    var resultat = f1verdi * faktor;
    document.minform.elements[ destnavn ].value=resultat;
    return true;
}

// --> </script>

<form name = \"minform\">
Heltal 5..10: <input type = \"text\" name = \"f1\" size = \"8\"><br>
Beregningsfelt: <input type = \"text\" name = \"f4\" size = \"8\"><br>
<input type = \"button\" value = \"beregn\" onClick=\"java script:check( 5, 10, 9.85, \'f4\' )\">
</form>

</body>
</html>
Avatar billede jakoba Nybegynder
04. oktober 2001 - 10:52 #3
Ups. og så glemte jeg at rette funktionens navn der den bliver kaldt:
<input type = \"button\" value = \"beregn\" onClick=\"java script:checkF1( 5, 10, 9.85, \'f4\' )\">
Avatar billede larssmile Nybegynder
04. oktober 2001 - 13:24 #4
Hej jeg er kommet frem til følgende. Er der nogle der kan se nogle problmer i scriptet?

Næste problem er at når der tastes et forkert tal og derefter summit form så kommer alert boksen godt nok men der bliver summittet med den forkerte værdi! Nogle der har et bud?

jeg bruger onblur på mine input felter, er det godt?

Mange Tak
Lars



function tjektal(getElem,min,max,faktor,putElem) {

    if( getElem.type == \"select\" ){
      fieldValue = getElem.options[getElem.selectedIndex].value;
    } else {
      fieldValue = getElem.value;
    };

    if ( fieldValue != \"\" ) {

            if ( !/^\\d+$/.test(fieldValue) ) {
            alert(\"Feltet skal være et heltal\");
            getElem.select();
            getElem.focus();
            return false;
        }
 
        var number = parseInt(fieldValue);
 
        if ( number > max ) {
            alert(\"Feltet må ikke være større end tal\")
            getElem.select();
            getElem.focus();
            return false;
        }

        if ( number < min ) {
            alert(\"Feltet må ikke være mindre end tal\")
            getElem.select();
            getElem.focus();
            return false;
        }
 
        var resultat = number * faktor;
        document.step1.elements[ putElem ].value=resultat;
        return true;
    }   
}
Avatar billede jakoba Nybegynder
04. oktober 2001 - 13:29 #5
Så skal vi kikke på din html kode for formen.

Scriptet skal aktiveres direkte eller indirektee i en onsubmit handler i form kommandoen, handleren skal returnere den true eller false scriptet giver retur.

fx:
<form ... onsubmit=\"return tjektal( \'f1\', 5, 10, 14, \'f4\' );\">

mvh JakobA
Avatar billede jakoba Nybegynder
04. oktober 2001 - 13:32 #6
Ups. dun getelem parameter er åbenbart feltet objekt og ikke dets navn:

fx:
<form ... onsubmit=\"return tjektal( this.form.elements[\'f1\'], 5, 10, 14, \'f4\' );\">
Avatar billede larssmile Nybegynder
04. oktober 2001 - 13:34 #7
jakoba>

Ok den er jeg med på, men hvad nu når min liste består af 5 linier eller flere. (Dannes af ASP) Med den onsubmit tjekker kun et felt nemlig f1.

Uha jeg glæder mig til at se om du kan svare på den, jeg har nemlig siddet længe og grublet og jeg er ved at være lidt træt.


mvh
Lars


Avatar billede jakoba Nybegynder
04. oktober 2001 - 13:54 #8
Du kan jo lave en ekstra funktion \'udenom\'

<script language=\'javascript\'> <!--

function submitTjek ( frm ) {

    if ( ! tjektal( frm.elements[ \'f1\' ], 5, 10, 14, \'f4\' ) )
      return false;
    if ( ! tjeltal( frm.elements[ \'f2\' ], 16, 24, 7, \'f5\' ) )
      return false;
...              // hvis en af dine tests fejler returneres false
    return true;  // Alt er ok. der må submittes
}; //end submitTjek ( Form objekt ) -> boolean

function tjektal ( ...  // ganske som du har den

...                      // og de andre testfunktioner

// --> </script>

din <form  kommando skal så have en onsubmit handeler a la:

<form ... onsubmit=\"return submitTjek( this );\">

nu har jeg vist svaret halvt :)

mvh JakobA
Avatar billede jakoba Nybegynder
08. oktober 2001 - 14:28 #9
?
Avatar billede senj Nybegynder
06. juni 2002 - 16:04 #10
luk sp.
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