Supprimer la dernière option de plusieurs select en même temps

[Résolu]
Signaler
Messages postés
3
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2008
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour,
cela fait 2 jours que je planche sur la question et je n'arrive toujours pas correctement à mes fins. J'espère que quelqu'un ici pourra m'aider.

Voici donc mon problème :
J'ai un formulaire dans un tableau, avec la structure suivante

La croix appelle une fonction javascript supprimant la ligne correspondant, et réattribuant des ID et Name corrects aux éléments suivants du formulaire. Aucun problème jusque là.
Par contre, quand je souhaite modifier mon select correspondant à la position afin de disposer du bon compte de lignes et que l'option selectionnée corresponde au numéro de ligne, j'ai quelques problèmes.

Voici la partie de code que j'utilise et qui me pose problème :
..
var pos_to_try=1;
while(pos_to_try<=nb_maxligne)
var elSel = document.getElementById('SelectPosition'+pos_to_try);
if (elSel.length > 0)
{
elSel.remove(elSel.length - 1);
}
pos_to_try = pos_to_try+1;
}
..

la variable nb_maxligne contient le nombre total de lignes dans mon formulaire. Mes select de position ont les ID SelectPosition1 -> SelectPosition4 (selon le screen, mais peut varier de 1 à infini)

mais ce code ne fonctionne pas toujours correctement chez moi. Suivant le nombre de lignes dans mon formulaire, et suivant la ligne que je souhaite supprimer, la boucle passera plusieurs fois dans le même select et me supprimera 2 entrées au lieu d'une, et ne passera pas du tout dans le dernier select du formulaire pour supprimer une entrée.

Je suis un peu largué par la situation, et n'étant pas un expert javascript, j'ai dépassé les limites de mes connaissances pour ce cas précis.
Si quelqu'un peu m'aider, non seulement ça m'arrangerait énormément, mais en plus je lui en serait très reconnaissant.

Merci par avance

(ps: j'espère avoir été clair dans mes explications et avoir donné toutes les informations nécessaires. Sinon je complèterai en cas de demande)

5 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
curieux de supprimer la dernière quelle que soit la ligne sélectionnée ?

ch'tit exemple, qui supprime soit la derniére soit celle sélectionnée
dans le 1er select

<select id="toto1" size=5>
<option>1
<option>2
<option>3
<option>4
</select>

<select id="toto2" size=5>
<option>1
<option>2
<option>3
<option>4
</select>

<select id="toto3" size=5>
<option>1
<option>2
<option>3
<option>4
</select>

<script type="text/javascript">
    function derniere()
    {   var sel=1;
        while ( document.getElementById("toto"+sel) )
        {   document.getElementById("toto"+sel).length--;
            sel++;
        }
    }
    function lameme()
    {    if ( document.getElementById("toto1").selectedIndex>=0 )
        {   var sel=3;
            while ( document.getElementById("toto"+sel) )
            {    document.getElementById("toto"+sel).remove(document.getElementById("toto1").selectedIndex);
                sel--;
            }
        }
    }
</script>

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,

    ton formulaire n'est pas visible !
    un copié/collé avec un éditeur de texte, sinon ....

>>Suivant le nombre de lignes dans mon formulaire, et suivant la ligne que je souhaite supprimer

    en fait tu veux supprimer une ligne dans un select ?


        id du select.remove(n° de la ligne, ça commence à 0)

    tu veux ne conserver que les n 1ères lignes ?

        id du select.length=nbr lignes à conserver



    ou quoi ?

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
Messages postés
3
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2008

Alors.. en fait, si j'ai mon formulaire qui contient 6 lignes, j'aurais mes 6 select qui contiendront les options 1 à 6, avec l'option correspondante au numéro de ligne qui sera sélectionnée.
Maintenant, selon l'example, je décide de supprimer la ligne 2. je souhaite modifier mes 5 select restants en supprimant la dernière entrée (6) puisque je n'ai plus de ligne 6 dans mon tableau.

J'espère que c'est un peu plus clair.. j'ai bien pensé avoir été un peu abstrait dans ma description de tout à l'heure
Messages postés
3
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2008

La fonction derniere() fait exactement ce que j'ai besoin
Merci
J'avais pas pensé à faire un length-- à la place du remove.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour à vous

On ne peut que s'incliner devant l'exemple ô combien pédagogique de The Bultez.
Néanmoins...

Le javascript, très permissif, est un des rares langages
autorisant la lecture et écriture de la longueur d'un tableau.
Je prefère pour
ma part utiliser, quand cela est simple à mettre en oeuvre le remove, qui est de
surcroît tout à fait jouable dans ton cas.

Ton problème me semble plutôt
venir de ton approche !...

Testes ta fonction dans l'exemple de The Bultez, elle
marche
//------------------------
function delete_derniere(){
  var pos_to_try = 1;
  var nb_maxligne = 3;  //
pour l'exemple
  while( pos_to_try <= nb_maxligne){
    var elSel = document.getElementById('toto'+pos_to_try);

    if( elSel.length > 0){
      elSel.remove( elSel.length -1);
    }

    pos_to_try ++;
  }
}
Le principal reste que cela fonctionne...
;0)