Expression d'un indice

Le
Nicolas Vasic
Bonjour,

J'ai une fonction :

function calcul (indice, ev){
document.test.elements[indice + 1].value = ev.which;
document.test.elements[indice + 2].value = ev.keyCode; }

et un form:

<FORM NAME="test">
<input type="text" name="a" "value="" onKeyDown="calcul(0, event)">
etc

Je n'arrive pas à remplacer l'indice en dur 0 (et les suivants, avec
incrémentation de 3) par une abstraction
genre: this.monIndiceDansMonFormulaire


Une idée? Merci à l'avance.

Nicolas
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SAM
Le #2859271
Bonjour,

J'ai une fonction :

function calcul (indice, ev){
document.test.elements[indice + 1].value = ev.which;
document.test.elements[indice + 2].value = ev.keyCode; }

et un form:

<FORM NAME="test">
<input type="text" name="a" "value="" onKeyDown="calcul(0, event)">
etc...

Je n'arrive pas à remplacer l'indice en dur 0 (et les suivants, avec
incrémentation de 3) par une abstraction
genre: this.monIndiceDansMonFormulaire


Une idée? Merci à l'avance.


moyen l'idée sans avoir les 2 éléments suivants.
M'enfin, si les 2 éléments suivants sont des input type=text
essayer :

function calcul (quoi, ev){
var quoi = quoi.nextSibling;
while(quoi.tagName!='INPUT'&&quoi.type!='text')
quoi=quoi.nextSibling;
quoi.value = ev.which;
quoi=quoi.nextSibling;
while(quoi.tagName!='INPUT'&&quoi.type!='text')
quoi=quoi.nextSibling;
quoi.value = ev.keyCode;
}

<input type="text" name="a" "value="" onKeyDown="calcul(this, event)">
<input type="text" name="a1" "value="" disabled>
<input type="text" name="a2" "value="" disabled>
<input type="text" name="b" "value="" onKeyDown="calcul(this, event)">
<input type="text" name="b1" "value="" disabled>
<input type="text" name="b2" "value="" disabled>

--
sm

Nicolas Vasic
Le #2860711
Merci mais c'est trop compliqué. Je me demandais simplement si un
element input d'un form pouvait transmettre son index dans la table des
éléments du dit form.

Nicolas

SAM wrote:
Bonjour,

J'ai une fonction :

function calcul (indice, ev){
document.test.elements[indice + 1].value = ev.which;
document.test.elements[indice + 2].value = ev.keyCode; }

et un form:

<FORM NAME="test">
<input type="text" name="a" "value="" onKeyDown="calcul(0, event)">
etc...

Je n'arrive pas à remplacer l'indice en dur 0 (et les suivants, avec
incrémentation de 3) par une abstraction
genre: this.monIndiceDansMonFormulaire


Une idée? Merci à l'avance.


moyen l'idée sans avoir les 2 éléments suivants.
M'enfin, si les 2 éléments suivants sont des input type=text
essayer :

function calcul (quoi, ev){
var quoi = quoi.nextSibling;
while(quoi.tagName!='INPUT'&&quoi.type!='text')
quoi=quoi.nextSibling;
quoi.value = ev.which;
quoi=quoi.nextSibling;
while(quoi.tagName!='INPUT'&&quoi.type!='text')
quoi=quoi.nextSibling;
quoi.value = ev.keyCode;
}

<input type="text" name="a" "value="" onKeyDown="calcul(this, event)">
<input type="text" name="a1" "value="" disabled>
<input type="text" name="a2" "value="" disabled>
<input type="text" name="b" "value="" onKeyDown="calcul(this, event)">
<input type="text" name="b1" "value="" disabled>
<input type="text" name="b2" "value="" disabled>




SAM
Le #2865031
Merci mais c'est trop compliqué.


Y a rien de compliqué (ce n'est pas toi qui pédales, c'est le JS)

Je me demandais simplement si un
element input d'un form pouvait transmettre son index dans la table des
éléments du dit form.


non, pas sans complications
C'est d'ailleurs un gros manque, je trouve.

function indexMoi(quoi) {
far F = document.test;
for(var i=0, L= F.length; i<L; i++)
if(F[i] == quoi) return i;
}

<input onkeydown="calcul(indexMoi(this), ev);" blabla>



Peut-être mieux, bien que semblant plus compliqué
(devrait permettre de ne pas ré-indexer à chaque keyDown):

<input blabla
onkeydown="if(typeof this.idx == 'undefined')
this.idx = indexMoi(this);
calcul(this.idx, ev);">


Pas certain qu'on y gagne en efficacité par rapport à glisser vers les
nextSiblings

--
sm

Nicolas Vasic
Le #2866611
Y a rien de compliqué (ce n'est pas toi qui pédales, c'est le JS)


Certes, mais le drame du JS est qu'il pédale à la vitesse d'une
grand-mère asthmatique qui aurait oublié de prendre ses médicaments.

Dans les pages ambitieuses il faut vraiment en tenir compte.

Nicolas

YD
Le #2869471
Y a rien de compliqué (ce n'est pas toi qui pédales, c'est le JS)


Certes, mais le drame du JS est qu'il pédale à la vitesse d'une
grand-mère asthmatique qui aurait oublié de prendre ses médicaments.


N'exagérons pas ! Pour la plupart des besoins les quelques
millisecondes nécessaires passent inaperçues.

Pour ton problème, rien ne t'empêche de créer une propriété
supplémentaire à tes objets. Dans un script en fin de body
ou sur le onload de la page, tu parcours les éléments de
ton formulaire et tu les numérotes en ajoutant une propriété
nommée /index/ (par exemple et hasard).

var a = document.forms['test'].elements;
for (var i=0; a.length>i; i++)
a[i].index = i;

Par la suite, pour connaître son rang dans les éléments :
this.index

Ce qui change la ligne HTML ainsi :
<input type="text" name="a" value=""
onKeyDown="calcul(this.index, event)">

Et c'est tout.
--
Y.D.


Nicolas Vasic
Le #2956351
YD wrote:
Pour ton problème, rien ne t'empêche de créer une propriété
supplémentaire à tes objets.


Super, merci.

Nicolas

Publicité
Poster une réponse
Anonyme