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

AJAX Discussion :

[AJAX] createElement, getElementById, cache


Sujet :

AJAX

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Octobre 2007
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 84
    Par d�faut [AJAX] createElement, getElementById, cache
    Bonjour,

    Je rencontre un petit probl�me :

    Je dispose d'une fonction qui me permet d'ajouter une div � la vol�e avec un id pr�cis (bloc_div_1, blod_div_2, etc.) sans recharger la page.

    Le probl�me est que getElementById(nouveau_bloc) renvoie "null" tant que la page n'a pas �t� recharg�.

    Est-il possible de sp�cifier au getElementById d'effectuer la recherche dans la page en cours et non pas dans la page "cach�e" ?

    Merci.

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    D�tails du profil
    Informations personnelles :
    �ge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par d�faut
    Salut,

    C'est peut-�tre plut�t ta fonction qu'il faudrait revoir , non ?

    ERE

  3. #3
    Membre confirm�
    Inscrit en
    Octobre 2007
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 84
    Par d�faut
    C'est fort possible , mais �tant d�butant en javascript je ne voit pas comment je pourrais faire.

    Bien sur je pourrais recharger la page a chaque ajout de nouvelle div, mais l' "int�r�t" de cette application AJAX est de pouvoir faire ses traitements sans rechargement.

    Donc si qqun a une id�e je suis preneur !

  4. #4
    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 : 55
    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
    Salut,
    Est-il possible de sp�cifier au getElementById d'effectuer la recherche dans la page en cours et non pas dans la page "cach�e" ?
    J'ai rien compris
    getElementById effectue une recherche par rapport au DOM... le cache n'a rien � voir l� dedans
    J'imagine comme emmanuel.remy que ton probl�me vient de ta fonction, mais sans la voir il est impossible de t'aider plus.
    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

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Ce type de probl�me est parfois caus� par l'insertion "brutale" d'un fragment html (je veux dire par l'interm�diaire d'innerHTML) plut�t que par le DOM, ce qui provoque parfois des erreurs lors de la r�cup�ration des �l�ments ajout�s.

    Conclusion : comme l'ont dit les camarades qui m'ont pr�c�d�... montre nous ta fonction d'insertion ^^

  6. #6
    Membre confirm�
    Inscrit en
    Octobre 2007
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 84
    Par d�faut
    Bon, je vais r��xpliquer car apparament a vouloir trop simplifier le probl�me je n'ai pas �t� clair :

    Je d�veloppe une application AJAX permettant de mettre � jour un fichier XML ayant une DTD bien pr�cise.

    Je parse mon fichier XML (avec PHP), je l'affiche sous forme de formulaire HTML. AJAX me permet d'ajouter des �l�ments a mon formulaire puis de sauvegarder le formulaire dans mon fichier XML via une fonction save() qui utilise XMLHttpRequest.

    Pour retirer le clou...
    Mais de toute fa�on si tu recharges ta page tu ne retrouveras pas les div pr�c�dentes charg�es � la vol�es donc cela ne fonctionnera pas non plus...
    En rechargeant la page je retrouve parfaitement les div pr�c�demment cr��es �tant donn�es qu'elles ont �t� sauvegard� dans le fichier XML.

    Tout ton probl�me est justement la notion de avec un id pr�cis: si c'est mal fait tu ne le verras jamais...
    Justement ce n'est pas mal fait car au rechargement de la page les id sont corrects.

    getElementById effectue une recherche par rapport au DOM... le cache n'a rien � voir l� dedans
    L� est le probl�me, j'ai l'impression que les "document.createElement" ne met pas � jour le DOM.

    Conclusion : comme l'ont dit les camarades qui m'ont pr�c�d�... montre nous ta fonction d'insertion ^^
    Voil� :
    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
     
    function addBrand(id)
    {
    	var li_brand = document.createElement('li');
    	var input_title_brand = document.createElement('input');
    	var input_requete_brand = document.createElement('input');
     
    	input_title_brand.setAttribute("name","level2_titles["+id+"][]");
    	input_title_brand.setAttribute("class","inputText");
    	input_title_brand.setAttribute("value","Brand name");
     
    	input_requete_brand.setAttribute("name","level2_requetes["+id+"][]");
    	input_requete_brand.setAttribute("class","inputText");
    	input_requete_brand.setAttribute("value","Brand requete");
     
    	li_brand.appendChild(input_title_brand);
    	li_brand.appendChild(input_requete_brand);	
     
    	alert(document.getElementById("brand_list_"+id));
    	document.getElementById("brand_list_"+id).appendChild(li_brand);
    }
     
    function addCategory()
    {
    	var li_category = document.createElement('li');
    	li_category.setAttribute("class","category_li");
     
    	var input_title_category = document.createElement('input');
    	input_title_category.setAttribute("name","level1_titles[]");
    	input_title_category.setAttribute("class","inputText");
    	input_title_category.setAttribute("onChange","save()");
    	input_title_category.setAttribute("value","Category name");
     
    	var input_requete_category = document.createElement('input');
    	input_requete_category.setAttribute("class","inputText");
    	input_requete_category.setAttribute("name","level1_requetes[]");
    	input_requete_category.setAttribute("onChange","save()");
    	input_requete_category.setAttribute("value","Category requete");
     
    	var aDelete = document.createElement('a');
     
    	aDelete.setAttribute("href","#");
    	aDelete.setAttribute("onClick","deleteCategory(this.parentNode)");
    	aDelete.appendChild(document.createTextNode("delete"));
     
    	li_category.appendChild(input_title_category);
    	li_category.appendChild(input_requete_category);	
    	li_category.appendChild(aDelete);
     
    	var ul_brand = document.createElement('ul');
    	var li_brand = document.createElement('li');
    	var input_title_brand = document.createElement('input');
    	var input_requete_brand = document.createElement('input');
     
    	var id = document.getElementsByName('level1_titles[]').length;
    	input_title_brand.setAttribute("name","level2_titles["+id+"][]");
    	input_title_brand.setAttribute("class","inputText");
    	input_title_brand.setAttribute("value","Brand name");
     
    	input_requete_brand.setAttribute("name","level2_requetes["+id+"][]");
    	input_requete_brand.setAttribute("class","inputText");
    	input_requete_brand.setAttribute("value","Brand requete");
     
    	var aAddBrand = document.createElement('a');
     
    	aAddBrand.setAttribute("href","#");
    	aAddBrand.setAttribute("onClick","addBrand("+id+")");
    	aAddBrand.appendChild(document.createTextNode("add Brand"));	
     
    	li_brand.appendChild(input_title_brand);
    	li_brand.appendChild(input_requete_brand);	
     
    	ul_brand.appendChild(li_brand);
    	li_category.appendChild(ul_brand);
    	li_category.appendChild(aAddBrand)
     
    	document.getElementById('category_list').appendChild(li_category);
    	save();
    }
    Le probl�me est lorsque j'effectue un addCategory() suivit d'un addBrand(id). Le addBrand ne trouve pas la cat�gorie pr�c�demment cr��.

    Merci de votre aide

  7. #7
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    D�tails du profil
    Informations personnelles :
    �ge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par d�faut
    Pour enfoncer le clou
    Je dispose d'une fonction qui me permet d'ajouter une div � la vol�e avec un id pr�cis (bloc_div_1, blod_div_2, etc.) sans recharger la page.
    Tout ton probl�me est justement la notion de avec un id pr�cis: si c'est mal fait tu ne le verras jamais...

    Le probl�me est que getElementById(nouveau_bloc) renvoie "null" tant que la page n'a pas �t� recharg�.
    Mais de toute fa�on si tu recharges ta page tu ne retrouveras pas les div pr�c�dentes charg�es � la vol�es donc cela ne fonctionnera pas non plus...

    ERE

  8. #8
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    D�tails du profil
    Informations personnelles :
    �ge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par d�faut
    Re,

    Si ton id de cat�gorie est "brand_list_"+id alors je ne vois pas o� tu le cr�es dans addCategory.

    ERE

  9. #9
    R�dacteur/Mod�rateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par d�faut
    Salut,
    Avec
    input_title_brand.setAttribute("name","level2_titles["+id+"][]");
    Tu auras des probl�mes sous Internet Explorer
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(document.all)//Pour IE
    {
    var var input_title_brand = document.createElement('<input name="level2_titles['+id+'][]">');
    }
    else //Pour les autres
    {
      var input_title_brand = document.createElement('input');
      input_title_brand.setAttribute("name","level2_titles["+id+"][]");
    }

  10. #10
    Membre confirm�
    Inscrit en
    Octobre 2007
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 84
    Par d�faut
    Citation Envoy� par emmanuel.remy Voir le message
    Re,

    Si ton id de cat�gorie est "brand_list_"+id alors je ne vois pas o� tu le cr�es dans addCategory.

    ERE
    Exact !
    J'ai ajout�
    ul_brand.setAttribute("id","brand_list_"+id);
    et ca a fonctionn�.

    Pour ce qui de l'incompatibilit� d'IE, je vais v�rifier mais ce n'ai pas trop grave car c'est une application qui sera utilis� en interne.

    Je suis d�sol� de vous avoir fait perdre votre temps.

    Merci de votre aide

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 02/05/2009, 09h03
  2. [AJAX] IE et cache
    Par roduce dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 17/12/2007, 16h35
  3. [AJAX] le getelementbyid qui veut pas
    Par zooffy dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 14/03/2007, 13h46
  4. [AJAX] createElement et lightbox
    Par Malarkey dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 19/01/2007, 11h55
  5. [AJAX] Probleme de cache
    Par BkD35 dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 31/12/2006, 14h42

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