Réponse acceptée !
Bonjour,
un petit rappel qui me semble utile
- l'index du premier élément d'un tableau commence à
0 et non à
1
- la longueur d'un tableau est égale au nombre d'éléments de celui ci,
MAIS le dernier élément d'un tableau n'a pas pour index
longueur_tableau mais
longueur_tableau -1.
Exemple :
T_Valeur[0] = 1;
T_Valeur[1] = 2;
T_Valeur[2] = 3;
T_Valeur[3] = 4;
...etc...
T_Valeur[9] = 10;
si je veux afficher le dernier élément il me faut écrire
var T_Longueur = T_Valeur.length; // qui sera égal à 10, 10 éléments stockés dans T_Valeur
Affiche(T_Valeur[T_Longueur -1]); // accès à la 10éme case soit l'index 9
Bon tout cela pour en arrivé au fait que quand tu écris
i <= optlength, il y a déjà faute car en aucun cas i doit être égal à
optlength, dans ce cas ton script se mettra en erreur pour
élément undefined, i doit rester INFERIEUR à optlength.
Ceci étant dit, lorsque tu supprimes une OPTION, tu te trouves dans le même cas de débordement, la console d'erreur doit d'ailleurs t'informer d'une erreur.
Voilà pour résumer il me semble normal que le 1st
for et la boucle
while se fasse jusqu'au bout avant de planter le script...
Exemple qu'aurait pu être ta fonction
Code Javascript :
//---------------------------
function Remove_Option( obj_){
var O_Ref = obj_;
var num = 1;
//-- utilisation de la méthode while pour ne pas avoir
//-- a modifier le code en cas de changement du nombre de SELECT
while( O_Test = document.getElementById( "q" + num++)){
if( O_Test != O_Ref){
//-- utilisation de .length car peut être modifiée en dynamique
for( var i = 0; i < O_Test.options.length; i++){
//-- Test de value
if( O_Test.options[i].value == O_Ref.value){
alert( i +" " +O_Test.id);
O_Test.remove(i);
// NOTA si l'on est sur qu'il n'y a pas d'autre élément dans le
// SELECT à supprimer on peut mettre un break qui met fin à la boucle
break;
// dans le cas contraire
i--; // réajustement du compteur
}
}
}
}
}
Voila à toi de jouer...
;O)