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 :

Rechargement Ajax et datepicker [UI]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dragonfly
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 464
    Par défaut Rechargement Ajax et datepicker
    Bonjour à tous,

    j'ai un probléme de rechargement AJAX qui me casse tout mon datePicker.
    Je m'explique, au premier lancement de ma page, mon datePicker s'affiche correctement

    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
     
    	try(){
    		$(function () {
    			$( "#datepicker" ).datepicker({ minDate: "-500M -10D", maxDate: "+500M +10D" ,showAnim: "fold",autoSize: false,dateFormat: "dd/mm/yy",constrainInput: true ,showOn: "button",
    				buttonImage: "Images/calendar.gif",
    				buttonImageOnly: true,changeMonth: true, changeYear: true, yearRange: 'c-20:c+10'
    			});
    			  $( "#datepicker" ).datepicker( "setDate" , sDate );
    			$( "#datepicker1" ).datepicker({ minDate: "-500M -10D", maxDate: "+500M +10D" ,showAnim: "fold",autoSize: false,dateFormat: "dd/mm/yy",constrainInput: true,showOn: "button",
    				buttonImage: "Images/calendar.gif",
    				buttonImageOnly: true,changeMonth: true, changeYear: true, yearRange: 'c-20:c+10'
    			});
    			 $( "#datepicker1" ).datepicker( "setDate" , strDate );
    		});
     
    	    $(".juston_IE:checkbox").live('click', function(){
    	    	 ToggleSelectionRow_IE($(this).attr('id'));
    	    });
    	    $(".juston_IEAll:checkbox").live('click', function(){
    	    	ToggleSelection();
    	    });
    	    $("a.juston_IEImg").live('click', function(){
    		 	 var ctrid=$(this).attr('id');
    		 	 window.setTimeout("Download_File_clicked('" + ctrid.split('~')[0] + "','" + ctrid.split('~')[1] + "')",1000);
    		});
    	}catch(e){
    		console.log(e);
    	}
     
    	tem_strCriteresDateFin = strDate ;
    	tem_strCriteresDateDebut = sDate ;
    	return true;
    Avec ce resultatNom : E33.jpg
Affichages : 804
Taille : 7,1 Ko

    aprés mon appel AJAX, j'ai ceci :

    Nom : E33-2.jpg
Affichages : 709
Taille : 5,8 Ko

    Avec, les dates qui ne se remplissent pas et les click sur les images qui n'affichent pas les calendriers.

    J'ai vu via l'ami G***** que dans le success de l'AJAX il faut refaire l'appel au datePicker mais le success et lancé lorsque l'appel AJAX est OK et non quand le résultat est affiché (mon input est dans le HTML donc le résultat doit être affiché).

    Je ne comprends pas comment faire.
    Si quelqu'un sait comment faire...

    Par avance, merci

  2. #2
    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
    Voir
    http://www.developpez.net/forums/d89...y/#post7915349
    + Post suivant de DanielHagnoul dans la discussion
    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 !

  3. #3
    Membre éclairé Avatar de dragonfly
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 464
    Par défaut
    Re, merci pour ta réponse,

    bon j'ai un peu de mal avec ces principes en JS donc on va y aller par étapes :

    il faut que je rajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $(document).bind('DOMNodeInserted', function(event) {
        $(event.target).filter('.plugClass').monplugin([params])
    })
    Quand tu parles de Ready, c'est dans une fonction type $(document).ready(function(){...}); ?
    Cette fonction sera lancé lors de tout les chargement ou seulement lors du premier?

    Cdlt,
    Dragonfly

  4. #4
    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
    la fonction en elle meme sera lancée au chargement de la page
    mais surveillera l'insertion DOMNodeInserted ...
    et lors de l'insertion d'un noeud appliquera le plugin selon le selecteur (filter)
    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 !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 432
    Par défaut
    Bonjour,

    En effet "ready" est associé au "document.ready()" en jquery, ou simplement au "ready" du <body>.

    Bref tout cela pour dire que cela s'applique quand le document est bien chargé avec tout ses éléments.

    Au passage je suis quand même curieux de savoir ce que fait ton Ajax, si j'ai bien comprit c'est lui qui te ramène ton champ date ?

    Pour ton datePicker ce serai mieux que tu utilise une class plutot qu'un id, comme la suggéré SpaceFrog

  6. #6
    Membre éclairé Avatar de dragonfly
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 464
    Par défaut
    J'ai essayé et ca ne marche pas trop bien,

    en fait au rechargement Ajax, il n'y a pas de passage dans la $(document).ready.

    J'ai essayé avant l'execution du code une fonction du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	$(document).bind('DOMNodeInserted', function(event) {
    	    $(event.target).filter('#datepicker').datepicker({ minDate: "-500M -10D", maxDate: "+500M +10D" ,showAnim: "fold",autoSize: false,dateFormat: "dd/mm/yy",constrainInput: true ,showOn: "button",
    			buttonImage: "Images/calendar.gif",
    			buttonImageOnly: true,changeMonth: true, changeYear: true, yearRange: 'c-20:c+10'
    		});
    	    $(event.target).filter('#datepicker').datepicker("setDate" , "02/04/2014" );
    	});
    D'aprés ce que j'en comprends, à chaque insertion dans le DOM, il va remplacer l'ancien '#datepicker' par celui ajouté ici, non?

    Ou je récrée mes élements datepicker mais toutjours le même résultat

    @darklTerreur
    - Lors de la création du datePicker, les inputs concernés recoivent la classe hasDatePicker donc au final il est possible de travailler avec la classe
    - La date est calculé juste avant la création du datepicker, l'AJAX sert juste à réfraichir la page avec en paramétre un autre numéro de client.

    J'ai essayé de détruire les datepicker avant la création mais les évenements click ne sont plus pris en compte (même lors du premier passage), mais lors du rechargement AJAX, il n'y a pas d'erreur Jquery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $( "#datepicker" ).datepicker("destroy");
    $( "#datepicker1" ).datepicker("destroy");
    D'ailleurs cela ne fait aucune erreur mais si j'ajoute une condition pour voir si un datepicker existe j'ai une erreur Jquery lors du rechargement (dans la biblio jquery.min.js, il n'arrive pas à le détruire alors qu'il existe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($(".hasDatepicker").length){			
    			$( "#datepicker" ).datepicker("destroy");
    			$( "#datepicker1" ).datepicker("destroy");
    		}
    D'ailleurs, pour la gestion du click, j'utilise .live(), avec .on() ou .attr("onclick"), le résultat serait-il différent? (en fait je ne vois pas trop la diférence entre ces syntaxes, juste que le .on est une évol du .live).

    Merci de votre patience.

    P.S : je suis en train d'essayer de comprendre le mutationObserver

  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
    en fait au rechargement Ajax, il n'y a pas de passage dans la $(document).ready.
    Tu n'as donc rien compris à ce que j'ai dit plus haut !

    il est normal qu'un ajax ne declenche pas le ready ... car la page ne se recharge pas

    le but est donc de surveiller l'insertion de noeud ...
    ce qui est fait dans le code donné plus haut
    pour appliquer le plugin lors de l'insertion de tes elements dans la page lors du retour d'ajax ...
    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. Réponses: 1
    Dernier message: 13/11/2013, 11h10
  2. [AJAX] Exécution de JS après rechargement AJAX
    Par Jeff2marseille dans le forum jQuery
    Réponses: 4
    Dernier message: 30/12/2012, 21h16
  3. [AJAX] Ajax et datepicker
    Par lau17 dans le forum AJAX
    Réponses: 7
    Dernier message: 07/05/2012, 16h49
  4. [Prototype] JavaScript ne marche plus après rechargement Ajax
    Par Nelieru dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 03/08/2011, 16h01

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