Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

GetElementsByName sans coder le nom....

4 réponses
Avatar
Bob
Bonsoir,

J'ai un script PHP qui m'extrait d'une base de donn=E9es un ensemble de
valeurs, qui sont mise dans un tableau :

Nom Type Statut
Bob 1 A Jours
Franck 1 KO

Dans la colonne Statut, je r=E9cup=E8re l'information sous forme de liste,
ce qui me permet de le modifier.

J'ai donc dans ma page html, pour chaque ligne, un <FORM...> dont le
nom est upd_state1, puis upd_state2, puis upd_state3, etc, ou les
chiffre =E0 la fin correspond au row_id de l'enregistrement ; qui est
pass=E9 en param=EAtre de la fonction d=E9crite ci-dessous.

Pour chaque form, j'ai un <SELECT....> dont le nom est state1 pour
upd_state1, state2 pour upd_state2, etc.... (pour les chiffre =E0 la
fin, idem que ci-dessus)

Ces select sont cens=E9s lancer une fonction :
onchange=3D"upd_state_sql(ID)" ou le ID correspond au row_id de
l'enregistrement

qui me permet de s=E9lectionner la requ=EAte SQL que je souhaite appliqu=E9.

Dans ma fonction upd_state_sql, il y a

function upd_state_sql(ID) {
this.ID =3D ID;
var choix =3D
document.upd_state1.state1.options[document.upd_state1.state1.selectedIndex=
]=2Evalue;

ce qui bien sur ne me convient pas, car je ne souhaite pas r=E9cuperer
la valeur du state1 du formulaire upd_state1, mais bien r=E9cup=E9rer
l'information qui correspond au formulaire appelant.

et donc mettre =E0 la place du 1 la valeur du ID.

J'ai essayer avec des GetElementsByID (ou GetElementsByName), mais je
n'y arrive pas :

var objForm =3D document.getElementsByname("upd_state" + ID)
var objSelect =3D document.getElementsByname("state" + ID);
var choix =3D
document.objForm.objSelect.options[document.objForm.objSelect.selectedIndex=
]=2Evalue;

Merci pour votre aide.

Cordialement

4 réponses

Avatar
Bruno Desthuilliers
Bonsoir,

(snip)

J'ai donc dans ma page html, pour chaque ligne, un <FORM...> dont le
nom est upd_state1, puis upd_state2, puis upd_state3, etc, ou les
chiffre à la fin correspond au row_id de l'enregistrement ; qui est
passé en paramêtre de la fonction décrite ci-dessous.

Pour chaque form, j'ai un <SELECT....> dont le nom est state1 pour
upd_state1, state2 pour upd_state2, etc.... (pour les chiffre à la
fin, idem que ci-dessus)

Ces select sont censés lancer une fonction :
onchange="upd_state_sql(ID)"


<hs>
Je suis peut-être un brin puriste, mais j'ai une sainte horreur des
handlers "dom 0" dans le html. D'autant qu'en général, ont les trouve
dans du code qui ne se dégrade pas correctement en l'absence de
javascript...
</hs>

ou le ID correspond au row_id de
l'enregistrement

qui me permet de sélectionner la requête SQL que je souhaite appliqué.

Dans ma fonction upd_state_sql, il y a

function upd_state_sql(ID) {
this.ID = ID;
var choix > document.upd_state1.state1.options[document.upd_state1.state1.selectedIndex].value;

ce qui bien sur ne me convient pas, car je ne souhaite pas récuperer
la valeur du state1 du formulaire upd_state1, mais bien récupérer
l'information qui correspond au formulaire appelant.


Accessoirement et s'il me souvient bien, ce n'est pas standard.

et donc mettre à la place du 1 la valeur du ID.

J'ai essayer avec des GetElementsByID (ou GetElementsByName), mais je
n'y arrive pas :

var objForm = document.getElementsByname("upd_state" + ID)
var objSelect = document.getElementsByname("state" + ID);
var choix > document.objForm.objSelect.options[document.objForm.objSelect.selectedIndex].value;


Tu n'a pas l'impression de te compliquer un peu la vie ?

var select = document.getElementById("state" + ID);
if (select) {
var choix = select.options[select.selectedIndex].value;
}

Pas testé, mais ça devrait le faire.

Avatar
SAM

Dans ma fonction upd_state_sql, il y a

function upd_state_sql(ID) {
this.ID = ID;
var choix > document.upd_state1.state1.options[document.upd_state1.state1.selectedIndex].value;

ce qui bien sur ne me convient pas, car je ne souhaite pas récuperer
la valeur du state1 du formulaire upd_state1, mais bien récupérer
l'information qui correspond au formulaire appelant.


function upd_state_sql(quiquoi) {
var ID = quiquoi.id.replace('state',''); // des fois que ça serve ?
var choix = quiquoi.options[quiquoi.selectedIndex].value;
// ...
}


<select id="state1254" onchange="upd_state_sql(this);">

Avatar
SAM

function upd_state_sql(quiquoi) {
var ID = quiquoi.id.replace('state',''); // des fois que ça serve ?
var choix = quiquoi.options[quiquoi.selectedIndex].value;
// ...
}


<select id="state1254" onchange="upd_state_sql(this);">


variante :
----------

function upd_state_sql(ID) {
var choix = document.forms['upd_state'+ID][0];
choix = choix.options[choix.selectedIndex].value;
location = 'mySql_upd.php?choix='+choix+'&id='+ID;
}

<form name="upd_state1" ... >
<select name="choix" onchange="upd_state_sql(1);">
<opt...
</select>
<input type="hidden" name="id" value="1">
<input type="submit" value="GO">
</form>
...
...
<form name="upd_state102" action="mySql_upd.php" method="post">
<select name="choix" onchange="upd_state_sql(102);">
<opt...
</select>
<input type="hidden" name="id" value="102">
<input type="submit" value="GO">
</form>


Remarque :
----------

Ha! tout de même et puisque tu dis que :
« pour chaque ligne, un <FORM...> dont le nom est upd_state1 »
^^^
je me demande si ton select n'a pas un nom au lieu d'un id ce qui va
poser problème si on utilise getElementById ...

Dans le doute, autant se passer de ces noms ou id inutiles pour ce que
je pense que tu veux faire


<form action="mySql.php" method="post">
<input type="hidden" name="id" value="1">
<select name="choix" onchange="upd_state_sql(this);">
<option ...
...
<option ...
</select>
<input type="submit" value="GO">
</form>
...
...
<form action="mySql_upd.php" method="post">
<input type="hidden" name="id" value="102">
<select name="choix" onchange="upd_state_sql(this);">
<option ...
...
<option ...
</select>
<input type="submit" value="GO">
</form>


<script type="text/javascript">
function upd_state_sql(quiquoi) {
var ID = quiquoi.form['id'].value;
var choix = quiquoi.options[quiquoi.selectedIndex].value;
location='mySql_upd.php?choix='+choix+'&id='+ID;
}
</script>

Les formulaires *DOIVENT* fonctionner sans JavaScript !

--
sm

Avatar
Bob
Bonsoir SAM,

Merci beaucoup pour ta réponse très détaillée. Je vais regarder ca.

On 6 nov, 22:55, SAM
wrote:



function upd_state_sql(quiquoi) {
var ID = quiquoi.id.replace('state',''); // des fois que ça serve ?
var choix = quiquoi.options[quiquoi.selectedIndex].value;
// ...
}

<select id="state1254" onchange="upd_state_sql(this);">


variante :
----------

function upd_state_sql(ID) {
var choix = document.forms['upd_state'+ID][0];
choix = choix.options[choix.selectedIndex].value;
location = 'mySql_upd.php?choix='+choix+'&id='+ID;

}

<form name="upd_state1" ... >
<select name="choix" onchange="upd_state_sql(1);">
<opt...
</select>
<input type="hidden" name="id" value="1">
<input type="submit" value="GO">
</form>
...
...
<form name="upd_state102" action="mySql_upd.php" method="post">
<select name="choix" onchange="upd_state_sql(102);">
<opt...
</select>
<input type="hidden" name="id" value="102">
<input type="submit" value="GO">
</form>

Remarque :
----------

Ha! tout de même et puisque tu dis que :
« pour chaque ligne, un <FORM...> dont le nom est upd_state1 »
^^^
je me demande si ton select n'a pas un nom au lieu d'un id ce qui va
poser problème si on utilise getElementById ...

Dans le doute, autant se passer de ces noms ou id inutiles pour ce que
je pense que tu veux faire

<form action="mySql.php" method="post">
<input type="hidden" name="id" value="1">
<select name="choix" onchange="upd_state_sql(this);">
<option ...
...
<option ...
</select>
<input type="submit" value="GO">
</form>
...
...
<form action="mySql_upd.php" method="post">
<input type="hidden" name="id" value="102">
<select name="choix" onchange="upd_state_sql(this);">
<option ...
...
<option ...
</select>
<input type="submit" value="GO">
</form>

<script type="text/javascript">
function upd_state_sql(quiquoi) {
var ID = quiquoi.form['id'].value;
var choix = quiquoi.options[quiquoi.selectedIndex].value;
location='mySql_upd.php?choix='+choix+'&id='+ID;
}
</script>

Les formulaires *DOIVENT* fonctionner sans JavaScript !

--
sm