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 :

Accès à mes éléments DOM [AJAX]


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur étude et développement logiciel
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur étude et développement logiciel

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Accès à mes éléments DOM
    Bonsoir Madame/Monsieur;

    j ai créer trois élements avec dom dans ma fonction jquery et tout ça marche bien. Mais j ai un probleme lorsque j essaye d' acceder à un element, il le voit pas c est à dire rien ne se passe c est comme si l' element n' existait pas. voir le code ci dessous (voir les parties colorées):
    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
    $(function(){
    	//gestion de la liste deroulante
    	$('#selection').click(function(){
    		if($(selection).val() == "profils"){
    		        //$('#zone_affichage').load("profils.php");
                            //document creer avec dom
    			//recuperer l' id du div où doit etre ajouté le contenu
    			var doc = document.getElementById("zone_affichage");
    			//vider d' abord le div avant de rajouter les elements
    			doc.innerHTML = "";
    			//doc.open();
    			//creation du document
    			//var bt1 = new Array();
    			bt1 = document.createElement("button");
    			bt1.setAttribute("id", "info");
    			var texte1 = document.createTextNode("Information");
    			bt1.appendChild(texte1);
    			//var bt2 = new Array();
    			bt2 = document.createElement("button");
    			bt2.id= "tofs";
    			var texte2 = document.createTextNode("Photos");
    			bt2.appendChild(texte2);
    			//var bt3 = new Array();
    			bt3 = document.createElement("button");
    			bt3.id= "amis";
    			var texte3 = document.createTextNode("Amis");
    			bt3.appendChild(texte3);
    			//ajouter les elements dans l' arborescence
    			doc.appendChild(bt1);
    			doc.appendChild(bt2);
    			doc.appendChild(bt3);
    		}
    		else if($(selection).val() == "supprimer"){
    			//rediriger l' utilisateur sur la page supprimer
    			document.location.href="supprimer.php";
    	    	}
    	});  
            //verifier que notre div 'zone_affichage1' n est pas vide
            /*if($.trim($('#zone_affichage').text()) == ""){
    		var a = $('button').attr('id');
    		alert("blabla");
    		//on recupere le bouton sur lequel on a cliquer
    		$('#info').click(function(){
    			alert('merci info');
    		});
    	}*/
    	//acces au bouton "Information" via son id
    	$('#info').click( function(){
    		alert('cool');
    	}
    );
    });
    Code html : 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
    <header>
    	<div id="parame">
    		<input type="search"/>
    		<select id="selection">
    			<optgroup label="Selectionner une option">
    			<option value="profils">Profils</option>
    			<option value="supprimer">Supprimer</option>
    			</optgroup>
    		</select>
    	</div>
    </header>
    <nav
    	<!-- elements de navigations -->
    	<!-- affiche la liste des amis -->
    	<div id="amis">
    		<button class="link">Liste amis</input><br/>
    	</div>
    	<!-- affiche les commentaires -->
    	<div class="commentaire">
    		<button class="link">Commentaires</input>
    	</div>
    	<!-- affiche les messages -->
    	<div class="message">
    		<button class="link">Messages</input><br/>
    	</div> 
    </nav>
    <section>
    	<div id="zone_affichage"></div>
    	<div id="zone_affichage1"></div>
    </section>

  2. #2
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <button class="link">Liste amis</input>
    Avec des codes HTML comme ça, inutile de se demander pourquoi jQuery a du mal à s'y retrouver.
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur étude et développement logiciel
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur étude et développement logiciel

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut jquery
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <button class="link">Liste amis</input>
    avec ce code je peux bien acceder aux elements sans souci. le probleme reside dans mon element créer à partir du dom
    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
    var doc = document.getElementById("zone_affichage");
    //vider d' abord le div avant de rajouter les elements
    doc.innerHTML = "";
    //doc.open();
    //creation du document
    //var bt1 = new Array();
    bt1 = document.createElement("button");
    bt1.setAttribute("id", "info");
    var texte1 = document.createTextNode("Information");
    bt1.appendChild(texte1);
    //var bt2 = new Array();
    bt2 = document.createElement("button");
    bt2.id= "tofs";
    var texte2 = document.createTextNode("Photos");
    bt2.appendChild(texte2);
    //var bt3 = new Array();
    bt3 = document.createElement("button");
    bt3.id= "amis";
    var texte3 = document.createTextNode("Amis");
    bt3.appendChild(texte3);
    //ajouter les elements dans l' arborescence
    doc.appendChild(bt1);
    doc.appendChild(bt2);
    doc.appendChild(bt3);

    quand je fais le bout de code ci-dessous, rien ne se passe, on dirai qu' il ne voit pas l' id="info"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //acces au bouton "Information" via son id
    $('#info').click( function(){
    	alert('cool');
    }
    merci pour votre reponse.

  4. #4
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Ce que Bovino veut dire c'est que ton code est faux tout simplement

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <button class="link">Liste amis</input>
    et du coup il faudrait corriger les erreurs de syntaxe avant de chercher un autre problème

    C'est pas parce que la récupération d'un élement marche bien qu'il faut en conclure que la structure DOM est bonne.

    Bon courage ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut


    Si tu ouvres une balise <button>, tu ne peux pas la fermer avec </input>, ça n'a aucun sens et perturbe JavaScript lorsqu'il parse le DOM.
    Alors ce n'est peut-être pas la cause directe de ton problème, mais c'est à corriger quand même.

    Pour ce qui est de ton problème, c'est juste une question de chronologie.
    Tu crées deux gestionnaires d'événement.
    Le premier va créer des éléments lorsque tu vas cliquer sur $('#selection') et le second affiche une alerte lorsque tu cliques sur $('#info').
    Sauf que quand tu déclares ton second gestionnaire, l'élément en question n'existe pas ! C'est comme si tu demandais à ta femme de t'apporter ton apéro alors que t'es pas marié... tu risques d'attendre longtemps et quand tu te marieras, c'est pas pour autant que ta femme t'apportera ton apéro puisqu'elle n'existait pas quand tu l'as demandé.
    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 à l'essai
    Homme Profil pro
    Ingénieur étude et développement logiciel
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur étude et développement logiciel

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut jquery
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <button class="link">Liste amis</button><br/>
    code corriger.

    voilà je reexplique:
    lorsque je clique sur l' option profils de ma liste deroulante (
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select id="selection">
    	<optgroup label="Selectionner une option">
    	<option value="profils">Profils</option>
    	<option value="supprimer">Supprimer</option>
    	</optgroup>
    </select>
    ),
    j' ai cette partie de dom qui est rajouter dans ma page:
    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
    bt1 = document.createElement("button");
    bt1.setAttribute("id", "info");
    var texte1 = document.createTextNode("Information");
    bt1.appendChild(texte1);
    //var bt2 = new Array();
    bt2 = document.createElement("button");
    bt2.id= "tofs";
    var texte2 = document.createTextNode("Photos");
    bt2.appendChild(texte2);
    //var bt3 = new Array();
    bt3 = document.createElement("button");
    bt3.id= "amis";
    var texte3 = document.createTextNode("Amis");
    bt3.appendChild(texte3);
    //ajouter les elements dans l' arborescence
    doc.appendChild(bt1);
    doc.appendChild(bt2);
    doc.appendChild(bt3);
    donc vous etes d' accord avec moi que les boutons (Information, Photos et Amis) sont rajoutés dans ma page (voir image jointe), quand je clique sur le bouton "information" mon bout de code ci dessous ne s' execute pas (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('#info').click( function(){
    	alert('cool');
    });
    )
    et pourtant les elements créer existe dans la page.Nom : page.jpg
Affichages : 129
Taille : 20,6 Ko

  7. #7
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Certes, les boutons existent lorsque tu cliques dessus (sinon, il y aurait un gros problème : comment arriverais-tu à cliquer sur des boutons qui n'existent pas ) sauf que lorsque tu déclares le gestionnaire d'événement indiquant que lorsqu'on clique dessus, il faut afficher une alerte, les éléments n'existent pas encore ! Donc ton gestionnaire ne s'applique à rien.
    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

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur étude et développement logiciel
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur étude et développement logiciel

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut jquery
    t a vu la pièce jointe. alors comment tu peux me dire que les elements n' existent pas encore et ils sont affichés dans la page. donc en cliquant sur le bouton <<Information>> il devrait m' afficher l' alerte. sauf c est pas le cas. Si vous avez une solution à me proposer ca serait la bienvenue.

  9. #9
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    à quel moment le code ci-dessous s’exécute t-il?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            $('#info').click( function(){
    	  alert('cool');
            });
    Ce que te dis Bovino c'est les éléments sont bien créés mais que l'ajout de l’événement onclick se fait trop tôt (si j'ai bien compris).

    Rajoutes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bt1.setAttribute("onclick", "alert('toto')");
    dans la création de tes boutons, je pense que ça devrait marcher...
    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur étude et développement logiciel
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur étude et développement logiciel

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut ajax
    Merci freddou ça marche.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut
    Donc c'est résolu ?
    je suppose que oui

    en tout cas belle méthode freddou
    Je vous remercie d'avance pour vos lumières.

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Citation Envoyé par darkterreur Voir le message
    en tout cas belle méthode freddou
    de toutes les méthodes possibles pour affecter un événement à un élément, cette solution est obsolète et la moins bonne de toutes, oElement.addEventListener(...) ou encore oElement.onclick = function(){...} .

    Tout autre chose concernant le code de baldeadama.

    J'ai un peu de mal à comprendre qu'utilisant jQuery tu utilises du "vanilla" javascript plus que de raison. Utilise les possibilités qui te sont offertes par cette librairie mais avant tout il faut que tu en comprennes la philosophie.

    Il y a lourd à parier que si tu avais fait cela sans jQuery ton erreur te serais apparue plus rapidement attendu que ta console aurait hurlée ?

    exemple de ce que tu aurais pu faire en jQuery
    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
    $('#selection').click(function(){
          if($(this).val() == "profils"){
     
            $("#zone_affichage").append( [
              $('<button></button>',{
                'id': 'info',
                'text': 'Information',
                'on': {
                  'click': function( event ){
                    alert('Information Button cliqued!');
                  }
                }
              }),
              $('<button></button>',{
                'id': 'photo',
                'text': 'Photos',
                'on': {
                  'click': function( event ){
                    alert('Photos Button cliqued!');
                  }
                }
              }),
            ]);
          }
      });
    Grâce à ton code tu risques de te retrouver avec moult BUTTON, à chaque clic sur le SELECT ce qui n'est peu être pas ton but.

    Maintenant je me demande si un simple affichage/masquage de la DIV id="zone_affichage" ne serait tout simplement pas plus efficace.

    J’espère quand même que tu as bien compris l'erreur de raisonnement que tu faisais!

  13. #13
    Membre à l'essai
    Homme Profil pro
    Ingénieur étude et développement logiciel
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur étude et développement logiciel

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut kquery
    Merci NoSmoking. car tout ce que je recherche c est la performance et tn raisonemment me semble meilleur et je vais l' adapter.

    Merci pour une fois de tn raisonnement

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

Discussions similaires

  1. Accès aux éléments du DOM chargés dynamiquement
    Par baldeadama dans le forum jQuery
    Réponses: 1
    Dernier message: 27/09/2014, 15h26
  2. [DOM] DOM : accès à un élément
    Par PKO06 dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 11/06/2008, 17h44
  3. [Rico] Accès aux éléments de la page de manière bizarre
    Par dodik dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 22/02/2006, 17h35
  4. Autoriser l'acces à "Mes Documents"
    Par cach dans le forum Sécurité
    Réponses: 5
    Dernier message: 16/01/2006, 10h37
  5. Réponses: 1
    Dernier message: 13/07/2005, 15h51

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