Avatar billede d.kryger Praktikant
25. juni 2009 - 13:43 Der er 12 kommentarer og
1 løsning

Focus på felt efter fejlmelding

Hej eksperter.

Jeg har en side hvor der er flere forms lige under hinanden med feltet "antal" og en knap til at "opdater antal" med. Formene hedder "produkt1", "produkt2" mv. Men der er nødvendigvis ikke alle numre i en rækkefølge.

Lige nu bruger jeg nedenstående script til at tjekke for om antal er et tal, og det virker rigtig fint. Jeg vil bare gerne have tilføjet den funktion som gør at feltet med fejl for "focus". Hvordan gør jeg det?

<SCRIPT language="JavaScript">
<!--
function IsNumeric(sText){
var ValidChars = "0123456789";
var IsNumber = true;
var Char;
for (i = 0; i < sText.length && IsNumber == true; i++) {
  Char = sText.charAt(i);
  if (ValidChars.indexOf(Char) == -1) {
    IsNumber = false;
  }
}
if (!IsNumber){
  alert("Fejl- Det er ikke et tal!");
}
return IsNumber
}
// -->
</SCRIPT>

<form onsubmit='return IsNumeric(this.antal.value);' action='side.php' name="produkt1" method='get' style='display: inline;'>
Avatar billede majbom Novice
25. juni 2009 - 15:57 #1
prøv med:

<SCRIPT language="JavaScript">
<!--
function IsNumeric(elmInput){
var ValidChars = "0123456789";
var IsNumber = true;
var Char;
var sText = elmInput.value;
for (i = 0; i < sText.length && IsNumber == true; i++) {
  Char = sText.charAt(i);
  if (ValidChars.indexOf(Char) == -1) {
    IsNumber = false;
  }
}
if (!IsNumber){
  alert("Fejl- Det er ikke et tal!");
  elmInput.focus();
}
return IsNumber
}
// -->
</SCRIPT>

<form onsubmit='return IsNumeric(this.antal);' action='side.php' name="produkt1" method='get' style='display: inline;'>
Avatar billede hmanback Nybegynder
25. juni 2009 - 17:30 #2
Til at validere om en "value" er et nummer kan du bruge isNaN()

Så koden Splazz foreslår kunne skrive som:

function IsNumeric(elmInput){
    if(isNaN(elmInput.value)){
        alert('Fejl- Det er ikke et tal!');
        elmInput.focus();
        return false;
    } else {
        return true;
    }
}
Avatar billede majbom Novice
25. juni 2009 - 20:12 #3
-> #2 - ja, det tænkte jeg ikke lige på - koncentrerede mig vist lige lidt for meget om selve spørgsmålet :)
Avatar billede showsource Seniormester
26. juni 2009 - 08:18 #4
Jeg bruger:

// javascript found at exp.dk

function get_id ($id) {

    if (document.all && document.getElementById) {
    return document.all($id);
    } else if (!document.all && document.getElementById) {
    return document.getElementById($id);
    } else {
    return false;
    }
}

function tjek_tal(idref) {

    var reg = /^[\d]+$/;
    var navn = get_id(idref);

    if(navn && navn.value !='') {

    var tekst = new String(navn.value);

        if(!navn.value.match(reg)){
        alert("Kun tal kan indtastes!");
        navn.value = tekst.substring(0,tekst.length-1);
        return false;
        }

    return true;

    }


}

<input type="text" name="talfelt" id="kuntal" onkeyup="tjek_tal(this.id);">

Men isNaN er nok mere oplagt ? :O)
Avatar billede d.kryger Praktikant
26. juni 2009 - 08:47 #5
Hej,

mange tak for Jeres forslag, men jeg kan ikke rigtig få det til at spille sammen med min side. Jeg har gjort sådan:

<SCRIPT language="JavaScript">
<!--
function IsNumeric(elmInput){
    if(isNaN(elmInput.value)){
        alert('Fejl- Det er ikke et tal!');
        elmInput.focus();
        return false;
    } else {
        return true;
    }
}
// -->
</SCRIPT>

<form onsubmit='return IsNumeric(this.antal.value);' action='opdater_produkt.php' method='get' name='produkt3' style='display: inline;'>
<input type='text' name='antal' style='width: 35px; text-align: right;' value='1'>
<input type='hidden' size='1' name='produkt_id' value='3'>
<input border='0' width='25' height='22' type='image' name='submit' src='/grafik/opdater.jpg' alt='Opdater antal'></form>
<br>
<form onsubmit='return IsNumeric(this.antal.value);' action='opdater_produkt.php' method='get' name='produkt23' style='display: inline;'>
<input type='text' name='antal' style='width: 35px; text-align: right;' value='1'>
<input type='hidden' size='1' name='produkt_id' value='23'>
<input border='0' width='25' height='22' type='image' name='submit' src='/grafik/opdater.jpg' alt='Opdater antal'></form>

Hvad går galt?
Avatar billede showsource Seniormester
26. juni 2009 - 09:04 #6
return IsNumeric(this.antal)

value bruges jo i funktionen
Avatar billede showsource Seniormester
26. juni 2009 - 09:05 #7
Men jeg vil da anbefale dig at bruge id som ref.
D.v.s gi' hvert talfelt dets unikke id
Avatar billede d.kryger Praktikant
26. juni 2009 - 09:07 #8
Jeg er ikke helt med. Kan du sætte det ind i min kode?
Avatar billede showsource Seniormester
26. juni 2009 - 09:27 #9
Din brug af ' omkring navne m.m. fik mig lige lidt ud af den!

<SCRIPT language="JavaScript">
<!--
function IsNumeric(elmInput){

var ref = document.getElementById(elmInput);

        if(ref && isNaN(ref.value)){
        alert('Fejl- Det er ikke et tal!');
        ref.focus();
        return false;
        } else {
        return true;
        }
}
// -->
</SCRIPT>


<form onsubmit='return IsNumeric("antal_1");' action='' method='get' name='produkt3' style='display: inline;'>
<input type='text' name='antal' id='antal_1' style='width: 35px; text-align: right;' value='1'>
<input type='hidden' size='1' name='produkt_id' value='3'>
<input border='0' width='25' height='22' type='image' name='submit' src='/grafik/opdater.jpg' alt='Opdater antal'></form>
<br>
<form onsubmit='return IsNumeric("antal_2");' action='' method='get' name='produkt23' style='display: inline;'>
<input type='text' name='antal' id='antal_2' style='width: 35px; text-align: right;' value='1'>
<input type='hidden' size='1' name='produkt_id' value='23'>
<input border='0' width='25' height='22' type='image' name='submit' src='/grafik/opdater.jpg' alt='Opdater antal'></form>

Bemærk " i onsubmit
Avatar billede majbom Novice
26. juni 2009 - 09:27 #10
som showsource siger skal du kun sende elementet med - ikke dets value:

<form onsubmit='return IsNumeric(this.antal.value);' action...

skal være:

<form onsubmit='return IsNumeric(this.antal)' action...

og så bør du rette:

<SCRIPT language="JavaScript">

til:

<script type="text/javascript">

bare lige for at overholdelidt standarder :)
Avatar billede d.kryger Praktikant
02. september 2009 - 09:18 #11
Jeg fik det aldrig til at virke, men det er heller ikke aktuelt mere, så vil I ikke ligge et svar som tak for hjælpen, så deler jeg lidt point ud...
Avatar billede majbom Novice
02. september 2009 - 15:53 #12
svar...
Avatar billede showsource Seniormester
02. september 2009 - 18:48 #13
Jeg hopper over.
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