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

jQuery Discussion :

Evènement change


Sujet :

jQuery

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Par défaut Evènement change
    Bonjour,

    Je dois débugger une fonction et voici mon problème:
    j'ai un select avec des Pays, lorsque celui ci est changé, il doit rafraichir un select d’hôtels.

    Par défaut, la liste d'hotels est créer et un événement on change sur celle ci est "crée aussi". Ca fonctionne, si je modifie la liste d'hotels, le comportement dans le change se fait.

    Maintenant si je change un pays, le select d'hotels se mets à jours ( comportement 2) avec une autre fonction et le on change est " re crée " mais celui ci ne fonctionne plus, aucun code à l'intérieur n'est exécuté. J'ai tenté de ne mettre qu'une fois le " on change " dans le comportement par défaut, et de unbind() la fonction avant de la recréer, mais ça ne fonctionne pas.

    Pour moi, ça ne me parait pas logique de créer l'evenement onChange à chaque passage dans la fonction. bref, le code est un peu bizarre.

    Je suis assez mauvais en jquery, mais je dois essayer de la débugger quand même :/

    Auriez vous des suggestions ?

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    function getHotels(id {
     
        if ( comportement 2 ) { 
            // $("#filtre_hotel"+id).remove()
            // $("#filtre_hotel"+id).unbind('change' );
    		[...]
            jQuery.ajax({
                type: 'POST',
                url: "{{ path('VIHotelBundle_hotel_hotels') }}",
                data: {
                    pays: pays,
                },
                success: function(data, textStatus, jqXHR) {
                    var json = jQuery.parseJSON(data);
                    var content = "<select class='filtre_hotel span12' id='filtre_hotel"+id+"' name='filtre_hotel'><option value='' selected='selected'>Hôtel</option>";
                    for(i=0;i<json.data.length;i++)
                        content = content + "<option id='"+json.data[i].presd+"' value='"+json.data[i].id+"'>"+json.data[i].content+"</option>";
                    content = content + "</select>";
                    $('#f'+id+' #hotel').html(content); // on place le select 
                }
            }); 
        }
     
        else if ( comportement par defaut )  { 
            var content = "<select class='filtre_hotel span12' id='filtre_hotel"+id+"' name='filtre_hotel'><option value='' selected='selected'>Hôtel</option>";
            {% for hotel in hotels %}
                {% if hotel.getPrestataire() != NULL %}
                    {% set presd = hotel.getPrestataire().getId() %}
                {% else %}
                    {% set presd = "-1" %}
                {% endif %}
                content = content + "<option id='{{presd}}' value='{{hotel.id}}'>{{hotel.nom}}</option>";
            {% endfor %}
            content = content + "</select>";
            $('#f'+id+' #hotel').html(content); // on place le select 
        }
     
     
        $("#filtre_hotel"+id).change(function () {
            alert('CHANGE');
     
        });
     
    }

  2. #2
    Membre chevronné
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Par défaut
    getHotels doit être déclanché sur l'événement change de $("#filtre_hotel"+id)
    Autrement dit, on met à jour la liste d'hotels lorque le filtre est modifié.
    On est bien d'accord?

    Donc ça on le définit une fois, et pas dans la fonction getHotels.

    Sinon tu peux donner un peu de contexte? Il y a plusieurs champs filtres? Tu as une page sur laquelle on peut voir ça?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Par défaut
    Bon, je viens de me rendre compte de mon erreur,
    Le sélecteur qui ajouté l'évènement Change() ne faisait rien dans le second cas car la requéte ajax n'était pas terminée.
    J'ai testé un
    Mais ça m'a provoqué une boucle je ne sais pas trop où, qui lançait un nombre croissant de requêtes et qui faisait planter le navigateur.. J'ai donc factorisé le bloc commun aux deux cas dans une fonction.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Par défaut
    Citation Envoyé par Eric Berger Voir le message
    getHotels doit être déclanché sur l'événement change de $("#filtre_hotel"+id)
    Autrement dit, on met à jour la liste d'hotels lorque le filtre est modifié.
    On est bien d'accord?

    Donc ça on le définit une fois, et pas dans la fonction getHotels.

    Sinon tu peux donner un peu de contexte? Il y a plusieurs champs filtres? Tu as une page sur laquelle on peut voir ça?
    Non, c'est un backoffice..
    Non plus pour le fonctionnement.

    Un selecteur Pays

    Un selecteur Hotels

    Lorsque Pays est modifié, getHotels est appelés pour montrer uniquement les hotels du pays en question.
    Au chargement de la page, on mets tous les hotels. Si un pays est ajouté, on fait de l'ajax pour aller chercher les hotels et recréer la balise select.

    Donc, on fait un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var content = "<select  id='filtre_hotel"+id+"' name='filtre_hotel'><option value=''  >Hôtel</option>";
    content = content + "</select>";
    $('#f'+id+' #hotel').html(content);
    Donc entre deux on écrase l'ancienne balise select par la nouvelle ( qui a le méme nom )

    Et donc dans le code, à cet endroit là, ( et c'est d'ailleurs fait dans les milliers de lignes du code que je reprends ), on redéclarer le .change sur la balise select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $("#filtre_hotel"+id).change(function () {
            alert('CHANGE');});
    Je n'aime pas trop le fait de re-déclarer le change tous le temps, mais sans faire ça, ça ne fonctionne plus.

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

Discussions similaires

  1. Evénement "Change" et condition "OU"
    Par Yooo84 dans le forum jQuery
    Réponses: 2
    Dernier message: 23/06/2014, 16h24
  2. Evénement change() sur un select
    Par Invité dans le forum jQuery
    Réponses: 8
    Dernier message: 13/01/2014, 09h17
  3. [XL-2007] Evènement change et formule
    Par Amidal dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/09/2010, 11h52
  4. Evènement Worksheet Change
    Par elise__ dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/10/2007, 14h36
  5. [VBA-E]evènement Change(ByVal Target As Range) et DDE
    Par potili2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/03/2007, 16h26

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