IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

exception dernier élément array


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut exception dernier élément array
    Bonjour,

    Je rencontre un problème lors de la suppression du dernier élément d'une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function suppr_element(nom_form,liste,elt) 
    {
    	// Différentes valeurs possible de elt
    	// elt = "n" => tous les éléments de la liste
    	// elt = une valeur
    	// elt = un tableau
     
    	var listeObj = document.forms[nom_form].elements[liste].options;
     
    	try{
     
    		if (elt == "n")
    		{
    			listeObj.length = 0;
    		}
    		else
    		{
    			if (!is_array(elt))
    			{
    				listeObj[elt] = null;
    			}
    			else
    				for(i=0;i<elt.length;i++)
    					listeObj.remove(elt[i]);
    		}
     
    	}catch(err){	texte_err = "Une exception s'est produite lors de l'exécution de la fonction suppr_element()\n\n";
    					texte_err+= "Valeurs des paramètres : nom_form=>"+nom_form+",liste=>"+listeObj.length+",elt=>"+elt+"\n\n";
    					texte_err+= "Nom de l'exception : " + err.name+"\n\n";
    					texte_err+= "Message d'erreur reçu : " + err.message+"\n\n";
    					texte_err+= "Merci de contacter le service Informatique.";
    					alert(texte_err);}
    }
    Ce code génère une exception, il affiche "liste=>1143, elt=>1143" et ne peut
    pas supprimer un élément sortant de la liste.
    Si je rajoute un alert(listeObj.length) il m'affiche un nombre élément = 1144 et la suppression s'effectue sans problème.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    function suppr_element(nom_form,liste,elt) 
    {
    	// Différentes valeurs possible de elt
    	// elt = "n" => tous les éléments de la liste
    	// elt = une valeur
    	// elt = un tableau
     
    	var listeObj = document.forms[nom_form].elements[liste].options;
     
    	try{
     
    		if (elt == "n")
    		{
    			listeObj.length = 0;
    		}
    		else
    		{
    			if (!is_array(elt))
    			{
    				alert(listeObj.length);
    				listeObj[elt] = null;
    			}
    			else
    				for(i=0;i<elt.length;i++)
    					listeObj.remove(elt[i]);
    		}
     
    	}catch(err){	texte_err = "Une exception s'est produite lors de l'exécution de la fonction suppr_element()\n\n";
    					texte_err+= "Valeurs des paramètres : nom_form=>"+nom_form+",liste=>"+listeObj.length+",elt=>"+elt+"\n\n";
    					texte_err+= "Nom de l'exception : " + err.name+"\n\n";
    					texte_err+= "Message d'erreur reçu : " + err.message+"\n\n";
    					texte_err+= "Merci de contacter le service Informatique.";
    					alert(texte_err);}
    }
    Je ne peut pas laisser l'alert et là j'avoue que je comprends rien.
    La gestion des exceptions de javascript a-t-elle une particularité ?

    Merci de m'apporter vos suggestions.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=elt.length-1;i>=0;i--)
    listeObj.remove(elt[i]);
    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Je suis d'accord pour la suppression d'éléments à partir d'un tableau.
    Mais le problème sr trouve lors de la suppression d'un seul élément et le dernier.

    Voici le bout de code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			if (!is_array(elt))
    			{
    //				alert(listeObj.length);
    				listeObj.remove(elt);
    			}
    Si je décommente l'alert il supprime sans problème le dernier élément.
    Si je laisse le commentaire il affiche l'exception dont j'ai parlé plus haut.

    Et là je ne comprends plus...

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Ton problème survient lorsque tu veux supprimer 1 élément ou un tableau d'éléments ?

    Pour un tableau :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(i=0;i<elt.length;i++)
       listeObj.remove(elt[i])
    lorsque tu fait un remove, la valeur de length est mise à jour.
    Ce que je ferai :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    L = elt.length
    for(i=0;i<L;i++)
       listeObj.remove(elt[0]);

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Auteur
    Ce que je ferai :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    L = elt.length
    for(i=0;i<L;i++)
       listeObj.remove(elt[0]);
    Citation Envoyé par E.Bzz
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=elt.length-1;i>=0;i--)
    listeObj.remove(elt[i]);
    Ca revient un peu à la même chose, on dirait

    En l'occurence, ça semble pas être le pb

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par E.Bzz
    Ca revient un peu à la même chose, on dirait

    En l'occurence, ça semble pas être le pb

    A+
    Effectivement le problème n'est pas là mais lors de la suppression d'un seul élément et cet élément est le dernier de la liste.

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par licorne
    Effectivement le problème n'est pas là mais lors de la suppression d'un seul élément et cet élément est le dernier de la liste.
    Comment appelles-tu ta fonction dans ce cas là ?
    On a pas d'exemple je crois ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Au fait, ça viendrait pas de ton test "is_array" qui foire ?
    C'est une instruction PHP, non ?

    En tous cas, ça y ressemble

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <script type='text/javascript'>
    function popelt(){
    if(document.getElementById('_1').options.length>0){
    document.getElementById('_1').removeChild(document.getElementById('_1').options[document.getElementById('_1').options.length-1]);
    }
    }
    </script>
    </head>
    <body>
    <select id='_1'>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option>
    <option>10</option>
    </select>
    <input type='button' onclick='popelt()' value='go' />
    </body>

    sinon pour retirer le dernier element d'un array ... pop()
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Bonjour Spacefrog et E.Bzz,

    Merci E.Bzz pour ta remarque concernant is_array. Je n'avais rien vu et JS ne m'a rien dit.
    Ca ne venait pas de ça mais je vais corriger.

    Merci Spacefrog pour ta solution : ça fonctionne très bien.
    Pourquoi remove supprime bien n'importe quel élément de la liste sauf le dernier et removeChild supprime n'importe quel élément correctement ?
    En gros quelle est la différence entre remove et removeChild ?

    Merci encore pour votre aide.

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    je ne connaissais pas remove ...

    je n'ai jamais eu de souci avec removeChild...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par SpaceFrog
    je ne connaissais pas remove ...

    je n'ai jamais eu de souci avec removeChild...
    C'est une méthode que j'ai trouvée plusieurs fois sur le web.
    J'ai trouvé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['testform'].testselect.options[i] = null;
    Celle-ci avait le même comportement que remove pour la suppression du dernier élément.

    Je suis loin de connaître toutes les particularités des méthodes de JS.

    Bonne journée Spacefrog.

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Une autre possibilité est de diminuer sauvagement le length des options:

    document.getElemenbtById('myselect').options.lenght
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <script type='text/javascript'>
    function popelt(){
    if(document.getElementById('_1').options.length>0){
    document.getElementById('_1').options.length--;
    }
    }
    </script>
    </head>
    <body>
    <select id='_1'>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option>
    <option>10</option>
    </select>
    <input type='button' onclick='popelt()' value='go' />
    </body>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  2. [Débutant]pb de fichier - array index out of bounds exception
    Par TheBlue dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 12/06/2006, 20h24
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo