Avatar billede ckrame Nybegynder
01. marts 2002 - 08:52 Der er 7 kommentarer og
1 løsning

Objekter og tabulering

Hej Eksperter

Jeg har leget lidt med oprettelse af egne objekter i javascript.
Jeg har lavet nedenstående eksempel, og vil gerne vide hvordan jeg får focus til at hoppe frem til næste tekst boks, når jeg har indtastet en værdi.

f.eks: Når jeg har indtastet antal 3'er skal focus flyttes til antal 2'er.

<HTML>
<HEAD>
  <TITLE>Objekt test</TITLE>
</HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
//class constructor
  function Serv(ID, vn) {

    //class properties
    this.Antal3 = 0;
    this.Antal2 = 0;
    this.Antal1 = 0;
    this.Antal0 = 0;
    this.AntalFejl = 0;

    this.ID = ID;
    this.VarNavn = vn;

    //class methods
    this.Antal3er = Antal3er;
    this.Antal2er = Antal2er;
    this.Antal1er = Antal1er;
    this.Antal0er = Antal0er;
    this.AntalFejler = AntalFejler;

    this.Point = Point;
    this.Antal_udenSF = Antal_udenSF;
    this.Antal_medSF = Antal_medSF;

    this.eff = eff;
    this.NulProcent = NulProcent;
    this.FejlProcent = FejlProcent;

    this.draw = draw;

    //this.draw();
  } // end class constructor

  //methods for class Serv
    function Antal3er(ant) {
      this.Antal3 = parseInt(ant);
      this.draw();
    }
    function Antal2er(ant) {
      this.Antal2 = parseInt(ant);
      this.draw();
    }
    function Antal1er(ant) {
      this.Antal1 = parseInt(ant);
      this.draw();
    }
    function Antal0er(ant) {
      this.Antal0 = parseInt(ant);
      this.draw();
    }
    function AntalFejler(ant) {
      this.AntalFejl = parseInt(ant);
      this.draw();
    }

    function Point() {
      var P;
      P = (this.Antal3 * 3) + (this.Antal2 * 2) + (this.Antal1 * 1) + (this.Antal0 * 0);
      return P;
    }

    function Antal_udenSF() {
      var Antal;
      Antal = this.Antal3 + this.Antal2 + this.Antal1 + this.Antal0;
      return Antal;
    }

    function Antal_medSF() {
      var Antal;
      Antal = this.Antal3 + this.Antal2 + this.Antal1 + this.Antal0 + this.AntalFejl;
      return Antal;
    }


    function eff() {
      var Antal;
      var Point;
      Point = (this.Antal3 * 3) + (this.Antal2 * 2) + (this.Antal1 * 1) + (this.Antal0 * 0);
      Antal = this.Antal3 + this.Antal2 + this.Antal1 + this.Antal0;
      return Point/Antal;
    }

    function NulProcent() {
      var antal;
      antal = this.Antal_medSF();
      return this.Antal0 / antal;
    }

    function FejlProcent() {
      var antal;
      antal = this.Antal_medSF();
      return this.AntalFejl / antal;
    }

    function draw() {
      this.ID.innerHTML = '';
      this.ID.innerHTML += '<FORM METHOD=POST ACTION="" NAME="MyForm">';

      this.ID.innerHTML += '3\'er: <INPUT SIZE="5" TYPE="text" LANGUAGE="JavaScript" VALUE="' + this.Antal3 + '" ONCHANGE="' + this.VarNavn + '.Antal3er(value)" NAME="' + this.ID + 'Serv3"><BR>';
      this.ID.innerHTML += '2\'er: <INPUT SIZE="5" TYPE="text" LANGUAGE="JavaScript" VALUE="' + this.Antal2 + '" ONCHANGE="' + this.VarNavn + '.Antal2er(value)" NAME="' + this.ID + 'Serv2"><BR>';
      this.ID.innerHTML += '1\'er: <INPUT SIZE="5" TYPE="text" LANGUAGE="JavaScript" VALUE="' + this.Antal1 + '" ONCHANGE="' + this.VarNavn + '.Antal1er(value)" NAME="' + this.ID + 'Serv1"><BR>';
      this.ID.innerHTML += '0\'er: <INPUT SIZE="5" TYPE="text" LANGUAGE="JavaScript" VALUE="' + this.Antal0 + '" ONCHANGE="' + this.VarNavn + '.Antal0er(value)" NAME="' + this.ID + 'Serv0"><BR>';
      this.ID.innerHTML += 'Fejl: <INPUT SIZE="5" TYPE="text" LANGUAGE="JavaScript" VALUE="' + this.AntalFejl + '" ONCHANGE="' + this.VarNavn + '.AntalFejler(value)" NAME="' + this.ID + 'ServFejl"><BR>';
      this.ID.innerHTML += '<BR>';

      this.ID.innerHTML += '</FORM>';

      this.ID.innerHTML += '<BR>';
      this.ID.innerHTML += '3er: ' + this.Antal3 + '<BR>';
      this.ID.innerHTML += '2er: ' + this.Antal2 + '<BR>';
      this.ID.innerHTML += '1er: ' + this.Antal1 + '<BR>';
      this.ID.innerHTML += '0er: ' + this.Antal0 + '<BR>';
      this.ID.innerHTML += 'Fejl: ' + this.AntalFejl + '<BR>';
      this.ID.innerHTML += '<BR>';
      this.ID.innerHTML += 'Point: ' + this.Point() + '<BR>';
      this.ID.innerHTML += 'Antal: ' + this.Antal_udenSF() + ' (eksl fejl)<BR>';
      this.ID.innerHTML += 'Antal: ' + this.Antal_medSF() + ' (incl fejl)<BR>';
      this.ID.innerHTML += '<BR>';

      this.ID.innerHTML += 'Effek: ' + this.eff() + '<BR>';
      this.ID.innerHTML += '0\'er % ' + this.NulProcent() + '<BR>';
      this.ID.innerHTML += 'Fejl % ' + this.FejlProcent() + '<BR>';

    }

//-->
</SCRIPT>
<BODY>

  <span id="MyTest">test</span>
  <SCRIPT LANGUAGE="JavaScript">
    ServTest = new Serv(MyTest, 'ServTest');
    ServTest.draw();
  </SCRIPT>

  <BR><BR><BR><BR>

  <span id="NyTest">hej</span>
  <SCRIPT LANGUAGE="JavaScript">
    MyServ = new Serv(NyTest, 'MyServ');

    MyServ.Antal3er(10);
    MyServ.Antal2er(10);

    MyServ.draw();
  </SCRIPT>

</BODY>
</HTML>
Avatar billede anjensen1 Novice
01. marts 2002 - 13:36 #1
..ja øv det er ikke så simpelt
Du har onkeydown/keyup som mulige events. Problemet er at du ikke kan lade den gå til næste boks blot fordi der har været trykket eller sluppet een tast (det kunne jo være at der skal tastes 100 i feltet..)
Måske du kunne bruge onmouseOver så du lader ethvert obj få focus når musen er på det men det er alligevel ikke den funktionalitet som du ønsker..
Du fisker faktisk efter en 'funktion' der på forhånd ved hvornår et felt er udfyldt korrekt og derfor fikst skifter til næste felt -jeg kan ikke se det -sorry :(
mvh/a.
Avatar billede gryn Nybegynder
01. marts 2002 - 13:42 #2
Indsæt dette i dine formboxe:

onKeyUp="document.din_form.din_box.focus();"
onChange="document.din_form.din_box.focus();"
onKeyPress="document.din_form.din_box.focus();"
Avatar billede ckrame Nybegynder
01. marts 2002 - 13:48 #3
anjensen1 >>
Den behøver ikke gøre noget før jeg selv taster tabulator og derfor gerne vil videre til næste boks, problemet er bare at med dette script bliver den næste boks ikke markeret.

gryn >>
Problemet er at tekst boksene bliver defineret inde i klasse definitionen og der ved jeg jo ikke hvormange instanser af klassen (objekter) der pt eksisterer. Jeg kan derfor ikke hardcode et boksnavn ala din_box.
Avatar billede anjensen1 Novice
01. marts 2002 - 13:56 #4
o..k
(-iøvrigt går min browser ned på dit script..)
Du kan tilføje et dynamisk ID til dine obj.

Derefter kan du få tilgang til dem med getelementbyid
du må så have et array eller ligende til at holde orden med hvopr mange (.length) obj der egentligt er så du ikke addresser et obj der ikke findes
Avatar billede jakoba Nybegynder
02. marts 2002 - 09:12 #5
mon ikke det du leder efter er tabindex:
  http://www.idocs.com/tags/forms/_INPUT_TABINDEX.html
så du selv kan styre hvor næste tabulatortryk fører focus hen istedet for at få alle links og ligegyldige felter med i sekvensen.

mvh JakobA
Avatar billede ckrame Nybegynder
06. marts 2002 - 09:38 #6
JakobA >>
Som jeg skrev til gryn. Jeg ved ikke hvormange tekst bokse der ender med at være. Brugeren kan oprette alt mellem 1 og 100 instanser af klasser, det vil derfor være besværligt at anvende tabindex, og jeg var egentlig på jagt efter en snildere løsning.

anjensen1 >>
Jeg kigger lige på det der med elementbyid - det kan godt ske det kan bruges.
Avatar billede ckrame Nybegynder
06. marts 2002 - 11:41 #7
Jeg har fundet en løsning ved hjælp af getElementById
thanks
Avatar billede anjensen1 Novice
06. marts 2002 - 13:09 #8
Flot! Tak for points :)
a.
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