[jQuery] Code non exécuté

Code non exécuté [jQuery] - HTML/CSS - Programmation

Marsh Posté le 21-10-2011 à 20:06:39    

Bonjour à tous,
 
J'aurais besoin d'un peu d'aide pour comprendre pourquoi une partie de mon code n'est pas exécuté avec jQuery. Je débute encore avec l'utilisation de la lib donc je suis preneur pour tous vos conseils.
 
Ajax.js

Code :
  1. $(document).ready(function(){
  2. // On affiche la liste des taches
  3. $.post("ajax/traitement.php",{action:"lister"},function(tab){
  4.  for(var i = 0, lg = tab.length; i < lg; i++){
  5.   switch(tab[i].priorite){
  6.    case "1":
  7.     var prio = "info";
  8.     break;
  9.    case "2":
  10.     var prio = "warning";
  11.     break;
  12.    case "3":
  13.     var prio = "error";
  14.     break;
  15.   }
  16.   var div = '<div class="alert-message block-message '+prio+'"><b>'+tab[i].nom+'</b><ul class="pb"><li><b>Date début</b> - '+tab[i].date_debut+'</li><li><b>Problème</b> - '+tab[i].probleme+'</li></div>';
  17.   $(".taches" ).append(div);
  18.  }
  19. },"json" );
  20. // Envoie du formulaire
  21. $("#form" ).submit(function(){
  22.  var isOk = true;
  23.  var titre = $("#titre" ).val();
  24.  var prio = $("#prio" ).val();
  25.  var desc = $("#desc" ).val();
  26.  if(titre == "" ){
  27.   $("#titre" ).addClass("alert" );
  28.   isOk = false;
  29.  }
  30.  if(desc == "" ){
  31.   $("#desc" ).addClass("alert" );
  32.   isOk = false;
  33.  }
  34.  if(isOk){
  35.   $.post("ajax/traitement.php",{action:"add",nom:titre,priorite:prio,description:desc},function(data){
  36.    if(data == "ok" ){
  37.     $(".displayMsg" ).html("<div class=\"alert-message block-message success\"><b>Nouvelle tâche ajoutée.</b><div>" );
  38.     $.post("ajax/traitement.php",{action:"refresh"},function(tab){
  39.      if(tab.err == "ok" ){
  40.       switch(tab.data.priorite){
  41.        case "1":
  42.         var prio = "info";
  43.         break;
  44.        case "2":
  45.         var prio = "warning";
  46.         break;
  47.        case "3":
  48.         var prio = "error";
  49.         break;
  50.       }
  51.       var div = '<div class="alert-message block-message '+prio+'"><b>'+tab.data.nom+'</b><ul class="pb"><li><b>Date début</b> - '+tab.data.date_debut+'</li><li><b>Problème</b> - '+tab.data.probleme+'</li></div>';
  52.       $(".taches:first" ).before(div);
  53.      }
  54.     },"json" );
  55.    }
  56.   },"json" );
  57.  $("#form" ).reset();
  58.  }
  59.  return false;
  60. });
  61. // On cache le commentaire du problème
  62. $(".pb" ).hide();
  63. // Hover sur les taches
  64. $(".alert-message" ).hover(function(){
  65.  $(this).append($("<span id=\"finir\"><b>x</a></b></span>" ));
  66. },function(){
  67.  $(this).find("span:last" ).remove();
  68. });
  69. // Affiche de la description
  70. $(".alert-message" ).click(function(){
  71.  $(this).find(".pb" ).toggle(300);
  72. });
  73. });


Mon problème vient du fait que le code suivant n'es pas exécuté. <code type="javascript">

Code :
  1. $(".pb" ).hide();


 
 
Pourtant que je lance cette fonction dans la console de chrome elle fonctionne.
 
J'ai aussi remarqué que lorsque je rafraîchis la page avec l'inspecteur ouvert j'ai une exception qui est levée à ce niveau là:
 

Code :
  1. matches.call( document.documentElement, "[test!='']:sizzle" );


 
 
Si vous avez des pistes, je suis preneur.
 
Merci


Message édité par Profil supprimé le 21-10-2011 à 20:06:56
Reply

Marsh Posté le 21-10-2011 à 20:06:39   

Reply

Marsh Posté le 22-10-2011 à 08:46:18    

tu caches pb en dehors de la methode de callback, car c'est dans la callback que tu le créés.
Je te rappelle que l'ajax se fait en asynchrone en général (sauf si comme un gros porc tu décides de le faire en synchrone, mais tu bloques le navigateur dans ce cas là


---------------
Blablaté par Harko
Reply

Marsh Posté le 22-10-2011 à 14:16:56    

Euh, j'ai vraiment du mal à comprendre là, tu pourrais être un peu plus précis s'il te plait ? [:cupra]  
 
Pour moi (enfin de ce que je pige), c'est qu'avec ma première fonction j'affiche mes taches avec leur description dans une div.pb. Donc une fois que c'est affiché, je vois pas pourquoi mon $(".pb" ).hide() ne pourrais pas les cacher.
 

Reply

Marsh Posté le 22-10-2011 à 17:24:57    

ton .pb existe QUAND ?
Est-ce qu'il existe avant que le javascript se lance ?  
 
Regarde bien comment se produit ton code, je te rappelle que l'ajax est asynchrone et donc ne se déroule pas dans le même ordre que le javascript.
 
 

Code :
  1. $(document).ready(function() {
  2. //premier post ajax
  3. $.post("ajax/traitement.php",{action:"lister"},function(tab){
  4.   //fonction de callback, tu ne sais pas quand cette fonction sera exécutée.
  5. });
  6. //deuxieme post ajax
  7. $("#form" ).submit(function(){
  8. //fonction de callback, tu ne sais pas si la premiere est finie d'executée ou pas, et cette fonction elle pourrait aussi bien s'exécuter avant ou apres la premiere fonction de callback
  9. });
  10. //code javascript qui suit l'ordre des choses  
  11. $(".pb" ).hide(); //tu essaye de cacher un élément qui n'existe pas encore, car cette ligne de code s'éxécute AVANT les deux première fonctions de retour ajax (callback)
  12. //idem pour le reste du code


---------------
Blablaté par Harko
Reply

Marsh Posté le 22-10-2011 à 18:23:40    

Ahh ok je viens de comprendre.
 
Pour te répondre mon .pb n'existe que lorsque la fonction callback de la première requête ajax vient de se terminer.

Reply

Marsh Posté le 22-10-2011 à 19:53:50    

maintenant tu sais ce qu'il te reste à faire :)
La premiere fonction doit s'executer, dans la callback tu fais l'appel ajax, et dans la callback de l'appel ajax, tu fait le reste de ton code. voila


---------------
Blablaté par Harko
Reply

Marsh Posté le 22-10-2011 à 20:00:42    

Ouep j'ai pu corriger tout ça, merci bien  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed