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 :

Trigger change ne fonctionne pas avec IE


Sujet :

jQuery

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Trigger change ne fonctionne pas avec IE
    Bonjour à tous,

    Il semblerait que Internet Explorer n'aime pas ce genre de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#sel_annee').trigger("change");
    C'est le trigger "change" qui ne semble pas fonctionner avec IE.

    Auriez-vous une solution pour que je puisse quand même garder mon code (genre un hack...) ?

    Merci d'avance.

    bee

  2. #2
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    salut,

    il y a aucune raison que ca ne fonctionne pas avec IE car le "trigger" "change" ne fait que lancer l'evenement (la fonction) que tu as enregistré sur "#sel_annee" ou un de ces enfants.

    tu as bien enregistré ton event de cette maniere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#sel_annee').on('change', function(){ ....

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Tu as raison... c'est même l'une des forces principales de jQuery de ne pas être compatible avec IE...

    Plus sérieusement, tu n'aurais pas un code un peu plus significatif et des explications un peu plus fournies pour permettre de comprendre pourquoi tu n'arrives pas à implémenter la fonctionnalité ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Salut à vous deux,

    Merci pour vos réponses.

    J'ai en effet l'impression que le problème ne vient pas du trigger (je l'ai commenté, le problème est toujours présent).

    Voici le code de ma page 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
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    $(document).ready(function(){
        $('.month').hide();
        $('.month:first').show();
        $('.months a:first').addClass('active');
        var current = 1;
        $('.months a').click(function()
        {
            //récupère le mois (entier) sans linkMonth
            var month = $(this).attr('id').replace('linkMonth','');
            if(current != 1 && month != 1) $('#month1').hide('');           
            console.log(current + " " + month);
            if(month != current)
            {
                $('#month'+current).slideUp();
                $('#month'+month).slideDown();
                $('.months a').removeClass('active'); 
                $('.months a#linkMonth'+month).addClass('active'); 
                current = month;
            }
        });
        $('#sel_annee').change(function()
        {
            $('.month').hide();
            $('.month:first').show();
            $('.months a:first').addClass('active');
            $.ajax({
                type: 'post',
                url: 'changer_annee.php',
                data: {
                    year:$('#sel_annee').val(),
                    //le_mois:month
                },
                dataType: 'text',
                success: function(retour_php)
                {
                    $('#month1').html('');         
                    //console.log(retour_php);
                    var arr = retour_php.split('#');
                    //console.log(retour_php);
                    for(i= 1; i<=12;i++)
                    {
                        $('#afficher_annee').html($('#sel_annee').val());       
                        $('#month'+i).html(arr[i-1]);
                        //console.log($('#month'+i));
                        //console.log(arr[i]);
                    }
                    $('.month:first').show();
                    $('.months a').removeClass('active');
                    $('.months a:first').addClass('active');
                },
                error: function(retour_php)
                {
                    alert("pas ok");
                    alert(retour_php);
                }
            });
        });
        $('#sel_annee').trigger("change");
        //permet de lancer cette fonction si on appuie sur un td de n'importe quel tableau
        $('table td').live('click', function()
        {
            //alert($(this).attr('id'));
            var rgb = ($(this).css('background-color'));
            var hexa = colorToHex(rgb);
            if(hexa != '#00ff00')
            {
                $(this).removeClass('occupe');         
                $(this).css('background-color','lime');         
            }
            else
            {
                $(this).css('background-color','red');         
            }
            $.ajax({
                type: 'post',
                url: 'ajouter_supprimer_indisponibilites.php',
                data: {
                    couleur:hexa,
                    jour:$(this).attr('id')
                },
                dataType: 'text',
                error: function()
                {
                    alert("pas ok");
                }
            });
        });
    });
    Voici le code de ma page php index :

    Code php : 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
    <div id="tabs_9">
        <select id="sel_annee">
                <option value="<?php echo (date('Y')-1); ?>"><?php echo (date('Y')-1); ?></option>
                <option value="<?php echo date('Y'); ?>" selected='selected'><?php echo date('Y'); ?></option>
                <option value="<?php echo (date('Y')+1); ?>"><?php echo date('Y')+1; ?></option>
            </select>
            <?php
            //require('config.php'); 
            require('calendrier/date.php');
            $date = new Date();
            if(!isset($_POST['year']))
            {
                $year = date('Y');
            }
            else
            {
                $year = $_POST['year'];
            }
            //$events = $date->getEvents($year);
            $dates = $date->getAll($year);
            ?>
            <div class="periods">
                <div class="year" id="afficher_annee"><?php echo $year; ?></div>
                <div class="months">
                    <ul>
                        <?php foreach ($date->months as $id=>$m): ?>
                             <li><a href="#" id="linkMonth<?php echo $id+1; ?>"><?php echo utf8_encode(substr(utf8_decode($m),0,3)); ?></a></li>
                        <?php endforeach; ?>
                    </ul>
                </div>
                <div class="clear"></div>
                <?php $dates = current($dates); ?>
                <?php foreach ($dates as $m=>$days): ?>
                   <div class="month relative" id="month<?php echo $m; ?>">
     
                   </div>
                <?php endforeach; ?>
            </div>
            <div class="clear"></div>
    </div>

    et la page qui est appelée par js :

    Code php : 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    <?php
       session_start();
        //indique que le type de la réponse renvoyée au client sera du Texte
        header('Content-Type: text/plain ; charset=utf-8');
        //anti Cache pour HTTP/1.1
        header('Cache-Control: no-cache , private');
        //anti Cache pour HTTP/1.0
        header('Pragma: no-cache');
        //require('connection.php');
     
     
        require_once dirname(__FILE__) . '/model/config/config.inc.php';
        require_once MODEL_PATH . '/autoloader/Autoloader.class.php';
        $autoloader = new Autoloader($configPath);
        $sql = new SqlManager(DB, USER_DB, PWD_DB);
        include('connection.php');
        require('fonctions/check_in_range.php');
     
       //Ce code gère le calendrier de l'onglet mon calendrier
       require('date.php');
       $date = new Date();
       if(!isset($_POST['year']))
       {
           $year = date('Y');
       }
       else
       {
           $year = $_POST['year'];
       }
       //print_r($_POST);
       //$events = $date->getEvents($year);
       $dates = $date->getAll($year);
       //print_r($dates);
       $retour = "";
       //current — Retourne l'élément courant du tableau
       $dates = current($dates);
     
       $sql = $bdd->prepare('SELECT jour FROM indisponibilites WHERE ref_identification = :id');
       $arr = array(':id'=>$_SESSION['id']);
       $res = $sql->execute($arr);
     
       while($row = $sql->fetch(PDO::FETCH_ASSOC))
       {
          $arr_jours[] = $row['jour'];
       }
       //je sélectionne toutes les dates des stages avec le nom et prénom du stagiaire
       $chaine = 'SELECT date_debut, date_fin, ref_etudiant, nom, prenom ';
       $chaine.= 'FROM stage LEFT JOIN etudiant ON etudiant.matricule = stage.ref_etudiant ';
       $chaine.= 'WHERE ref_identification = :id';
     
       $sql = $bdd->prepare($chaine);
       $arr = array(':id'=>$_SESSION['id']);
       $res = $sql->execute($arr);
     
       while($row = $sql->fetch(PDO::FETCH_ASSOC))
       { 
     
          $arr_et_ULB[] = array(
          'debut'  => strtotime($row['date_debut']),
          'fin'    => strtotime($row['date_fin']),
          'nom_et' => $row['nom'].' '.$row['prenom'] 
          );
       }
       //print_r($arr_et_ULB);
       //$m ce sont les mois
       foreach ($dates as $m=>$days)
       {      
          $retour .= '<table id="tab_cal"><thead><tr>';
     
          foreach ($date->days as $d)
          {
               $retour.= '<th>'.substr($d,0,3).'</th>';
          }
          $retour .= '</tr></thead>';
          //echo $retour;
          //return false;
          $retour .= '<tbody><tr>';
          //end — Positionne le pointeur de tableau en fin de tableau
          $end = end($days);
          foreach($days as $d=>$w)
          {
              $time = strtotime("$year-$m-$d");
     
              //fusion des cellules au cas où le premier jour du mois ne commence pas un lundi
              if($d == 1 && $w != 1)
              {
                 $retour.= '<td colspan="'.($w-1).'" class="padding noclass"></td>';
              }
              //construction de l'id de chaque TD
              $l_id = $year.'-';
              if($m < 10)
              {
                $l_id .= '0'.$m.'-';
              }
              else
              {
                $l_id .= $m.'-';
              }
     
              if($d < 10)
              {
                $l_id .= '0'.$d;
              }
              else
              {
                $l_id .= $d;
              } //fin de la construction de l'id de chaque TD
              $retour.= '<td id="'.$l_id.'" ';
     
              //je vérifie dans l'array $arr_jours que l'id ne s'y trouve pas, autrement, c'est un jour rouge
              if(in_array($l_id,$arr_jours))
              {
                $retour .= ' class="occupe" ';
              }
              else
              {  
                $date_from_user = $l_id;
     
                $arr = check_in_range($date_from_user, $arr_et_ULB);
     
                foreach($arr as $array)
                {
                   if($l_id == $array['date_stage'])
                   {
                      $retour .= ' class="et_ulb" ';
                   }
                }
     
              }
              $retour .= '>';
     
              //si c'est le jour d'aujourd'hui, on met un encadré rouge autour du jour
              if($time == strtotime(date('Y-m-d')))
              {
                 $retour.= ' class="today" >';
              }
              $retour.= '<div class="relative">';
                //c'est ici que l'on affiche les jours dans les td (1, 2, 3... 30, 31)
                $retour.= '<div class="day">'.$d;
                $retour .= '</div>';
                //je crée une nouvelle div pour le nom du stagiaire
                $retour .= '<div id="nom_et">';
                //utilisation du tableau associatif créé dans la fonction 
                foreach($arr as $array)
                {
                   if($l_id == $array['date_stage'])
                   {
                      $retour .= $array['nom_et'];
                   }
                }
                $retour .= '</div>';
     
              $retour .= '</div>';
              $retour .= '<div class="daytitle">';
     
             $retour.= '</div></td>';
             if($w == 7)
             {
               $retour.= '</tr><tr>';
             }
          } //fin du foreach($days as $d=>$w)
     
          //au cas où un mois ne termine pas un dimanche, fusion des td 
          if($end != 7)
          {
             $retour .= '<td colspan="'.(7-$end).'" class="padding noclass"></td>';
          }
          $retour.= '</tr>';
          $retour.= '</tbody>';
          $retour.= '</table>';
          $retour .='</div>';
          $retour.= '#';
          //$retour.='</table>';
          //$retour.='</div>';
       } //fin du foreach ($dates as $m=>$days)
     
       //$retour.='</div>';
     
       echo $retour;
     
    ?>

    Merci d'avance pour l'aide.

    bee

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Déjà, merci de lire et appliquer : Important : Les règles incontournables d'utilisation de ce forum et de poster le code HTML généré et non le PHP.

    Ensuite :
    le problème est toujours présent
    Voilà qui nous avance bien... Ton problème était à l'origine
    Trigger change ne fonctionne pas avec IE
    tu enlèves ton trigger et tu constates que le problème est toujours présent...

    Soit c'est normal parce que si tu supprimes ton trigger, il n'y a vraiment pas de raison qu'il fonctionne correctement, soit ton problème est ailleurs et il faut nous l'expliquer !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour,

    Désolé pour le retard de ma réponse, j'étais occupé sur d'autres choses.

    Déjà, merci de lire et appliquer : Important : Les règles incontournables d'utilisation de ce forum et de poster le code HTML généré et non le PHP.
    Toutes mes excuses Bovino.

    J'ai résolu quelques problèmes en transformant lime et red en code hexadécimal.

    J'ai trouvé la source du problème, je n'ai pas qu'à savoir comment réparer cette erreur :

    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
     
    success: function(retour_php)
                                     {
                                                 //alert(retour_php);
     
                                        $('#month1').html('');         
                                        //console.log(retour_php);
                                        var arr = retour_php.split('#');
     
                                  		//console.log(retour_php);
     
                                       for(var i= 1; i<=12;i++)
                                       {
                                          $('#afficher_annee').html($('#sel_annee').val());
                                         //la première div ne se remplit pas ici (uniquement avec IE)
                                          $('#month'+i).html(arr[i-1]);
                                          alert("month"+i+" vaut : ");
                                         //première div vide ici (uniquement avec IE)
                                          alert($('#month'+i).text());
                                          //console.log($('#month'+i));
                                          //console.log(arr[i]);
                                       }
    Le problème est que la première div est vide, elle ne se remplit pas.

    Les alertes me montrent une première div vide et les autres remplies.

    Le trigger fonctionne parfaitement avec IE, je m'étais donc trompé dans mon premier post.

    Edit: J'ai finalement résolu le problème.

    En examinant toutes les alertes, je me suis rendu compte que la première avait deux ou trois retours à la ligne (ou peut être plusieurs espaces) avant la chaine à insérer avec html().

    J'ai utilisé la méthode trim de jquery, et comme par magie, cela fonctionne !

    J'avoue ne pas comprendre pourquoi IE n'accepte pas un retour (ou plus) à la ligne avec le contenu à insérer ?

    Avez-vous une idée ?

    Merci d'avance pour votre aide.

    bee

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2007, 18h19
  2. [ImageMagick] imagecreatefromjpeg() ne fonctionne pas avec tous mes jpg
    Par guy2004 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/08/2006, 09h41
  3. evenement onclick ne fonctionne pas avec explorer??
    Par nath-0-0 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 12h13
  4. Réponses: 7
    Dernier message: 24/01/2006, 11h03
  5. window.resizeTo ne fonctionne pas avec firefox?
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/06/2005, 15h07

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