/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
yet another newbie question
Fra : please-answer-here


Dato : 21-06-05 23:11

Jeg forsøger at indsætte nedenstående i et SetTimeout kald:

document.forms[yid].elements[i].focus();

men hvordan er det lige at jeg eskaperer/evaluerer variablerne yid og i?



 
 
Lasse Reichstein Nie~ (21-06-2005)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 21-06-05 23:27

"please-answer-here" <noone@nohost.nodomain.invalid> writes:

> Jeg forsøger at indsætte nedenstående i et SetTimeout kald:

Man skal ikke multiposte (du har jo spurgt om det samme i
comp.lang.javascript - subject afslører jo også at det har
ikke-dansk oprindelse :).

> document.forms[yid].elements[i].focus();

> men hvordan er det lige at jeg eskaperer/evaluerer variablerne yid og i?

Det nemmeste er bare at pakke det ind i en funktion:

setTimeout(function(){document.forms[yid].elements[i].focus();},10);

Der er nogle ældre browsere hvor det ikke virker, men jeg tror ikke det
er noget at bekymre sig over.

Jeg har ikke fulgt med i tråden i c.l.j, så jeg ved ikke hvor "i" kommer
fra. Hvis det her foregår inde i en løkke, så "i" ændrer sig, så skal
man gøre noget mere.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

please-answer-here (21-06-2005)
Kommentar
Fra : please-answer-here


Dato : 21-06-05 23:47

Lasse Reichstein Nielsen wrote:
> "please-answer-here" <noone@nohost.nodomain.invalid> writes:
>
>> Jeg forsøger at indsætte nedenstående i et SetTimeout kald:
>
> Man skal ikke multiposte (du har jo spurgt om det samme i
> comp.lang.javascript - subject afslører jo også at det har
> ikke-dansk oprindelse :).

Ved det og beklager dybt. Men desperationen vandt over opdragelsen/etiketten


>
>> document.forms[yid].elements[i].focus();
>
>> men hvordan er det lige at jeg eskaperer/evaluerer variablerne yid
>> og i?
>
> Det nemmeste er bare at pakke det ind i en funktion:
>
> setTimeout(function(){document.forms[yid].elements[i].focus();},10);

Jeg kan ikke få det til at virke !

Her er koden, som jeg bokser med: problemet er settimeout sætningen

function validate(that) {
var slam='slum';
var xid=that.id;
var yid=that.form.id;
var xantelm=that.form.elements.length;
for (i=0;i<xantelm;i++) {
if (document.forms[yid].elements[i].id == xid) {
if (that.value.length!=3) {
alert('Exactly 3 characters are needed');
setTimeout('document.forms[yid].elements[i].focus()',200);
}
}
}
return true;
}

</script>
</head>
<body>
<form id="forma" action="sletmig.asp" method="post">
<input id="fielda" type="text" onchange="validate(this);">
<input id="fieldb" type="text" onchange="validate(this);">
<input id="fieldc" type="text" onchange="validate(this);">
</form>
</body>

>
> Der er nogle ældre browsere hvor det ikke virker, men jeg tror ikke
> det er noget at bekymre sig over.
>
> Jeg har ikke fulgt med i tråden i c.l.j, så jeg ved ikke hvor "i"
> kommer fra. Hvis det her foregår inde i en løkke, så "i" ændrer sig,
> så skal man gøre noget mere.
>
> /L



Lasse Reichstein Nie~ (22-06-2005)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 22-06-05 18:01

"please-answer-here" <noone@nohost.nodomain.invalid> writes:

[multipost]
> Ved det og beklager dybt. Men desperationen vandt over opdragelsen/etiketten
>

Det går nok :) En anden gang så skriv noget i stil med "også spurgt i
c.l.j".

> Her er koden, som jeg bokser med: problemet er settimeout sætningen

Ikke det eneste problem :)

> function validate(that) {
> var slam='slum';
> var xid=that.id;

Så "that" refererer til en form-control med en id, som vi gemmer
i "xid".

> var yid=that.form.id;

og "yid" gemmer id'en på formen som "that" er i.

> var xantelm=that.form.elements.length;
> for (i=0;i<xantelm;i++) {

Så gennemløber vi alle elementer i formen ...

> if (document.forms[yid].elements[i].id == xid) {

og tjekker om deres id er lig med xid. Altså om de er den control
der også ligger i "that". Lidt spild, når vi nu allerede har fat
i den.

> if (that.value.length!=3) {
> alert('Exactly 3 characters are needed');
> setTimeout('document.forms[yid].elements[i].focus()',200);

og den her skal vi så fikse.

En noget kortere version:
----
function validate(that) {
if (that.value.length != 3) {
alert('Exactly 3 characters are needed');
setTimeout(function(){that.focus();},200);
}
}
----

Hvis man ikke optimerer, så kan du skifte din problemlinje ud med:

setTimeout(function(){
document.forms[yid].elements[xid].focus();
},200);

>> Jeg har ikke fulgt med i tråden i c.l.j, så jeg ved ikke hvor "i"
>> kommer fra. Hvis det her foregår inde i en løkke, så "i" ændrer sig,
>> så skal man gøre noget mere.

Du kan så *ikke* bruge "i", da du jo fortsætter løkken og derfor
ændrer "i"'s værdi efter at setTimeout er kaldt. For at få det til at
virke, skal man oprette en ny variabel til at holde værdien (dette
giver kun mening når man starter flere setTimeout'er fra samme løkke,
og skulle altså ikke have været et problem for dig ... :).

function makeFocusFunc(icopy) {
return function() {
document.forms[yid].elements[icopy].focus();
};
}
setTimeout(makeFocusFunc(i), 200);

Hyg!
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

please-answer-here (22-06-2005)
Kommentar
Fra : please-answer-here


Dato : 22-06-05 00:31

please-answer-here wrote:
> Jeg forsøger at indsætte nedenstående i et SetTimeout kald:
>
> document.forms[yid].elements[i].focus();
>
> men hvordan er det lige at jeg eskaperer/evaluerer variablerne yid og
> i?

sagen lukket.



Jens Gyldenkærne Cla~ (22-06-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-06-05 09:58

please-answer-here skrev:

>> men hvordan er det lige at jeg eskaperer/evaluerer variablerne yid og
>> i?

> sagen lukket.

Hvordan løste du problemet? Det er god skik at sende svaret til gruppen,
også hvis man har fundet det et andet sted.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

please-answer-here (22-06-2005)
Kommentar
Fra : please-answer-here


Dato : 22-06-05 15:08

Jens Gyldenkærne Clausen wrote:
> please-answer-here skrev:
>
>>> men hvordan er det lige at jeg eskaperer/evaluerer variablerne yid
>>> og i?
>
>> sagen lukket.
>
> Hvordan løste du problemet? Det er god skik at sende svaret til
> gruppen, også hvis man har fundet det et andet sted.

Fuldstændig enig, men sengen kaldte !!

Løsningen som vel egentlig er en workaround var at opbygge udtrykket som en
streng.

var strx = 'document.' + yid + '.' + xid + '.focus();';
setTimeout(strx,200);

så sagen om hvorledes variablerne kan overføres og evalueres er vel i
princippet stadig åben.



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste