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 :

chargement liste déroulante liée


Sujet :

jQuery

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut chargement liste déroulante liée
    Bonjour,
    je suis actuellement dans le développement d'un formulaire et je butte sur un point assez bizarre.
    J'utilise la bibliothèque jquery pour ajouter de l'ajax dans mon formulaire sur mes listes déroulantes liées.

    Mon formulaire fonctionne très bien pour le remplissage mais me pose des problèmes lorsque je dois le pré remplir.

    En effet les listes déroulantes sont liées, un produit => numero_release => activité.

    Afin de pré remplir le formulaire, je lui passe un numéro de produit et un code de référence (qui identifie dans une base de donnée un document appartenant à un numero de release et une activité).

    Je vais donc expliquer mon problème, lorsque je passe mes 2 paramètres au formulaire, celui ci me les affiche très bien en PHP avec un echo mais les listes déroulantes ne se charge pas comme il faut.

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $("#product").val(produit);  //je sélectionne la bonne option de mon select product 
    productAjax();          // je charge la liste rel en fonction du select de product 
    $("#rel").val('<?php echo $rel; ?>');    // je sélectionne la bonne option de mon select rel 
    releaseAjax();          // je charge la liste activity en fonction du select de rel 
    $("#activity").val('<?php echo $act; ?>');   // je sélectionne la bonne option de mon select activity

    Le problème vient du fait que les listes doivent se charger trop vite. Si je place des alert() comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $("#product").val(produit); 
    productAjax(); 
    alert('tempo'); 
    $("#rel").val('<?php echo $rel; ?>'); 
    releaseAjax(); 
    alert('tempo'); 
    $("#activity").val('<?php echo $act; ?>');
    tout se passe bien, alors que si je les enlève, les $("xxxx").val() sont vide et mon formulaire ne se charge pas.

    J'ai aussi essayé de débugger avec firebug en pas à pas et ça marche car le pas à pas freine les $("xxxx").val() pour laisser charger les select.

    Je pense donc que la solution peut venir d'une sorte de temporisation à la place des mes alertes qui sont vraiment contraignant pour mon formulaire.

    Merci d'avance

    PS : Je pourrais bien sur charger toute les listes avec du PHP, mais la fonction jquery $("xxxx").val() = me permet de sélectionner l'option voulu ce qui allège grandement le code.

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonjour,

    votre problème ne vient pas des select et du fait que la valeur n'est pas assez vite mise à jour mais des requêtes AJAX.

    En effet, les requêtes AJAX s'exécutent par défaut de manière asynchrone, à savoir que l'on attend pas que la requête se soit pleinement exécutée pour continuer le code.

    C'est ce qui doit se passer dans votre cas, les requêtes AJAX sont lancées, mais comme c'est asynchrone, on continue à dérouler le code alors que les requêtes sont toujours en tâche de fond.

    Pour passer les requêtes AJAX synchrones, il suffit de rajouter l'option :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.ajax({ /* vos options */, async: false });
    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    Citation Envoyé par Arnaud F. Voir le message
    Bonjour,

    votre problème ne vient pas des select et du fait que la valeur n'est pas assez vite mise à jour mais des requêtes AJAX.

    En effet, les requêtes AJAX s'exécutent par défaut de manière asynchrone, à savoir que l'on attend pas que la requête se soit pleinement exécutée pour continuer le code.

    C'est ce qui doit se passer dans votre cas, les requêtes AJAX sont lancées, mais comme c'est asynchrone, on continue à dérouler le code alors que les requêtes sont toujours en tâche de fond.

    Pour passer les requêtes AJAX synchrones, il suffit de rajouter l'option :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.ajax({ /* vos options */, async: false });
    ++
    J'utilisais la fonction $.post, celle ci doit être considérée comme asynchrone. Je vais donc de ce pas modifié ces requêtes par des $.ajax en synchrone et je reviens pour donner mon avis.
    En tout cas si c'est ça, AIE AIE Arnaud,

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    Merci beaucoup, ca marche!!!!!!!!!!!!
    J'ai donc modifié mes requêtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.post("formulaire_ajax.php", {table_id:$("#product").val(), action:"type_doc", activite:$("#activity").val()},
           function(returned_data) {
                  $("#type").html(returned_data);
           }
    );
    par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.ajax({type:"GET", url:"formulaire_ajax.php", data:"table_id="+$('#product').val()+"&action=type_doc&activite="+$("#activity").val(), async:false,success:
    function(returned_data) {
                  $("#type").html(returned_data);
           }
    });
    J'ai cherché les options de $.ajax et hop ca marche nickel , encore merci Arnaud

  5. #5
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Vous passez d'un type POST à un type GET, êtes-vous sûr de vouloir cela?

    Dans tous les cas, si cela vous convient, c'est bon
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    Je déterre mon vieux topic pour une nouvelle demande.

    J'ai un problème lié à IE.

    Mes listes déroulantes influent sur la mise en page de mon formulaire.
    Selon les listes choisies, certaines cellules de mon tableau identifiée par des id sont hide() ou show().

    Et bien j'ai encore le même problème, à la suite d'un switch qui définit mon type d'affichage pour le pré chargement de mes listes, si je met des alert(); dans mon code les hide et show fonctionne sous IE sinon rien....

    Je précise que ca fonctionne très bien sous Firefox mais mon problème surgit avec IE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		case 2 :	//TOOLS AND RESPONS
    				$("#activity").val("<?php echo $rubrique; ?>");
    				activityAjax();
     
    				$("#type").val("<?php echo $activite; ?>");
    				level3Ajax();
    			break;
    Voici le code qui fonctionne avec ie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		case 2 :	//TOOLS AND RESPONS
    				$("#activity").val("<?php echo $rubrique; ?>");
    				activityAjax();
     
                                    alert("yo");
     
    				$("#type").val("<?php echo $activite; ?>");
    				level3Ajax();
    			break;
    et ne fonctionne pas sous ie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		case 2 :	//TOOLS AND RESPONS
    				$("#activity").val("<?php echo $rubrique; ?>");
    				activityAjax();
    				$("#type").val("<?php echo $activite; ?>");
                                    alert("yo");
    				level3Ajax();
    			break;
    pourtant mes fonctions ajax sont de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.ajax({type:"GET", url:"<?php echo $chemin_form_ajax; ?>", data:"table_id="+$('#product').val()+"&action=level3&type="+$("#type").val(), async:false,success:
    Et voici la partie zappé par IE (sauf si je place un alert).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	var checked = "checked='checked'";
    	if (checked == "<?php echo $link_doc_2; ?>") {
    		$('#TRlink').hide(); $('#TRfile').show();}
     
    	if (checked == "<?php echo $link_qdb_1; ?>") {
    		$('#TRqdb').show(); $('#TRreport').hide(); $('#TRreport2').hide();}
    	if (checked == "<?php echo $link_qdb_2; ?>") {
    		$('#TRqdb').hide(); $('#TRreport').show(); $('#TRreport2').show();}
    	if (checked == "<?php echo $link_qdb_3; ?>") {
    		$('#TRqdb').hide(); $('#TRreport').hide(); $('#TRreport2').hide();}
    Merci d'avance de votre aide

Discussions similaires

  1. Debug script listes déroulantes liées
    Par AnTiX dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/04/2005, 12h03
  2. Griser 1 liste déroulante liée à une autre, pb de concaténat
    Par linou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/03/2005, 16h45
  3. listes déroulantes liées
    Par k4eve dans le forum Struts 1
    Réponses: 3
    Dernier message: 26/04/2004, 15h11
  4. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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