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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    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

    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
    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+

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    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 confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    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

    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
    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+

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    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
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    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