Avatar billede simseboii Nybegynder
17. april 2007 - 20:36 Der er 6 kommentarer

Spring til næste felt

Hej.
Jeg er igang med at lave en slags krydsord hvor man indtaster ét bogstav i et input.
Når man har indtastet et bogstav i feltet springer den automatisk til næste felt og det kan jeg lave sådan:
Kode

<script type="text/javascript">
function inputTjek(felt)
{
    if(document.captureEvents)
    {
        if(Event.KEYUP)
        {
            document.captureEvents(Event.KEYUP);
        }
    }

    document.onkeyup = tast;

    function tast(e)
    {
        if(!e)
        {
            if(window.event )
            {
                e = window.event;
            }
            else
            {
                return;
            }
        }

        if(typeof(e.which) == 'number')
        {
            e = e.which;
        }
        else if(typeof(e.keyCode) == 'number')
        {
            e = e.keyCode;
        }
        else if(typeof(e.charCode) == 'number')
        {
            e = e.charCode;
        }
        else
        {
            return;
        }

        if (felt == 1)
        {
            var markeretFelt = document.form1.felt1.value;

            if ((e >= 65 && e <= 122) || (e >= 48 && e <= 57))
            {
                if (markeretFelt.length == 1 && felt < 98)
                {
                    document.form1.felt2.focus();
                }
            }
        }
    }
}
</script>

<form name="form1" method="post" action="" />
<input  name="felt1" maxlength="1" style="width:30px;text-align:center;" onkeyup="java script:inputTjek(1);" /> -
<input  name="felt2" maxlength="1" style="width:30px;text-align:center;" onkeyup="java script:inputTjek(2);" />
</form>



Men jeg har 98 felter og det betyder at jeg skal ligge dette ind i mit JavaScript 98 gange:
Kode

        if (felt == 1)
        {
            var markeretFelt = document.form1.felt1.value;

            if ((e >= 65 && e <= 122) || (e >= 48 && e <= 57))
            {
                if (markeretFelt.length == 1 && felt < 98)
                {
                    document.form1.felt2.focus();
                }
            }
        }

Og så tænkte jeg om der måske ikke var en nemmere måde at gøre det på?

På forhånd tak.
- Simon
Avatar billede thesurfer Nybegynder
17. april 2007 - 22:13 #1
Her er et forslag, der virker i Opera v9.20, FireFox v2.0.03, Internet Explorer v6 SP2:

<script type="text/JavaScript" language="JavaScript">
function inputTjek(felt)
{
num = parseInt(felt.name.replace("felt",""))
num++;
if (num > 98) num = 1;
naestefelt = eval("document.form1.felt" + num);
naestefelt.focus();
naestefelt.select();
}
</script>


Du skal lige rette din onkeyup til: onkeyup="inputTjek(this);"

De kloge hoveder er velkommen til at kommentere/rette scriptet.. jeg frygter at eval-metoden er en fusker løsning.. :-)


Jeg håber at du kan bruge det.
- Svar
Avatar billede roenving Novice
18. april 2007 - 01:58 #2
>>strandløve

-- du kan vel ligesågodt bruge den form, der ligger rundt om feltet:

<script type="text/javascript">
function inputTjek(felt){
  num = parseInt(felt.name.replace("felt",""))
  num++;
  if (num > 98) num = 1;
  naestefelt = felt.form.elements["felt" + num];
  naestefelt.focus();
  naestefelt.select();
}
</script>

-- skal man over i (ægte) xhtml er der alligevel ingen af de benyttede metoder, der er gyldige !-)
Avatar billede simseboii Nybegynder
18. april 2007 - 06:52 #3
Hej.
Mange tak.
Jeg ved ikke helt hvem jeg skal give pointne, men en løsning kunne være at roenving også lage et svar, så kunne I dele pointne.
Avatar billede roenving Novice
18. april 2007 - 13:28 #4
Nej, den smule tilføjelse ændrer ikke på, at det var strandløven, der kom med konceppet !-)
Avatar billede thesurfer Nybegynder
18. april 2007 - 23:04 #5
roenving> Er det overhovedet ikke muligt, at lave en "dynamisk" reference i XHTML?
Altså lige som min eval og din elements["felt" + num]..

- Svar
Avatar billede roenving Novice
18. april 2007 - 23:22 #6
De pusler med noget, der hedder XFORMS, som jeg simpelthen ikke har kigget på ...

-- ellers kan man jo altid bruge den xml-kompatible .getElementById("noget").setAttribute("value","En værdi");

-- men da dynamisk aflæsning af attributter ikke understøttes direkte med xml-syntaks, skal vi altså vente på de der xforms !-)
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