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 :

Safari et l'event onChange() sur un select


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Par défaut Safari et l'event onChange() sur un select
    Bonjour à tous,
    Alors voilà, cela fait 4heures que je me prend la tête sur un problème qui me rend complètement fou ! Tout fonctionne sur les autres navigateurs, mais sur Safari j'ai un souci que je n'ai trouvé sur aucun sujet Google.
    L'objectif de mon script : lors de la sélection d'un élément d'une liste "select", je souhaite supprimer l'attribut "selected" de toutes les autres options. Pour ce faire, je sélectionne mes selects, je crée un événement "onChange()" qui supprime cet attribut "selected" sur les options sauf celui qui vient d'être sélectionné.
    Le problème est le suivant : quand je clique sur un élément et que je récupère le "selectedIndex", Safari me renvoie 2 valeurs. Celle sélectionnée par défaut, et la nouvelle valeur.
    Je souhaiterais obtenir seulement la dernière valeur sélectionnée.
    A savoir que les autre navigateurs me renvoie seulement une valeur.
    Quelqu'un aurait une idée s'il vous plaît ??
    D'avance merci, car ce problème me bloque complètement.
    Le HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select id="select_indice" name="name" required="required" class="class">
      <option value=""><vide></option>
      <option value="B" selected="selected">Bis</option>
      <option value="T">Ter</option>
      <option value="Q">Quater</option>
    </select>
    Le script JS :
    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
    var object = document.getElementsByTagName("select");
       var select = null;
       for (var i=0; i<object.length; i++) {
           select = object[i];
           select.onchange=function() {
                var children = this.childNodes;
                var selectedIndex = this.selectedIndex;
                alert(selectedIndex);
                for (var j=1; j<children.length; j++) {
                    if (j != selectedIndex+1) {
                        var child = children[j];
                        //alert(child.text);
                        child.removeAttribute("selected");
                    }
                }
           };
       }

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    heu
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select id="select_indice" name="name" required="required" class="class">
      <option value=""><vide></option>
      <option value="B" selected="selected">Bis</option>
      <option value="T">Ter</option>
      <option value="Q">Quater</option>
    </select>
    sans aucun javascript c'est le comportement par défaut de tout select

    pour pouvoir sélectionner plusieurs valeurs il faut ajouter l'attribut multiple
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select id="select_multiple" name="name" required="required" class="class" multiple="true">
      <option value=""><vide></option>
      <option value="B" selected="selected">Bis</option>
      <option value="T">Ter</option>
      <option value="Q">Quater</option>
    </select>

    http://www.w3schools.com/jsref/tryit...f_option_index

    le membre de l'objet option qui indique qu'un élément est sélectionné est "selected" et pas l'attribut html "selected"
    l'attribut html "selected" contient l'information présente dans le code source HTML qui à servit à créer l'objet option affiché par le navigateur.
    C'est cette information qui est utilisée si un reset du formulaire est demandé.

    "selected" est un attribut obligatoire de l'objet option (mais c'est un texte facultatif dans le code source html) tu ne peux pas faire de removeAttribute("selected");.
    tu peux par contre changer sa valeur avec un setAttribute("selected", "false");.

    Il ne faut pas confondre le code source html que tu écrit est les objets DOM que le navigateur crée à partir de ce code.

    A+JYT

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Par défaut
    Bonjour et merci pour votre réponse,

    Je précise que je travaille sur symfony et que lorsque je sélectionne une valeur dans la liste générée par symfony, l'ancienne valeur sélectionnée garde son attribut "selected"

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    encore une fois il ne faut pas confondre html source et objet DOM

    l'utilisateur et javascript agissent sur le DOM pas sur le code source

    A+JYT

Discussions similaires

  1. propriété onChange sur un select, pb sous IE7 !
    Par avogadro dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/02/2007, 15h46
  2. onchange sur un SELECT : passage de paramètre
    Par NikoBe dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/10/2006, 11h14
  3. 2 actions sur evenement onchange sur champ Select
    Par falz222 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2006, 20h59
  4. onChange sur un SELECT
    Par linar009 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/07/2006, 10h14
  5. [Onchange] sur checkbox selection ds une liste deroulante
    Par maxxou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/01/2006, 00h17

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