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

JavaScript Discussion :

[AJAX] Création obj/form non accessibles


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut [AJAX] Création obj/form non accessibles
    Salut,

    Bon j'ai déjà eu ce problème, je l'ai déjà résolu mais là, depuis hier je n'y parviens pas!

    Manip:
    Saisie d'un numéro d'identification dans un champ, une fois rempli, requête auto pour vérifier son existence (ajax).
    Si existe, deux listes box sont générées de données dans la base correspondantes à cet identifiant (ces deux listes sont déjà présentes mais vides au début de la saisie).
    Sinon, deux liste box supplémentaires sont ajoutées (non existantes dans le formulaire) afin que l'ont saisisse des critères de reconnaissance (manuellement) autre que l'identifiant.

    Pb:
    Je ne parviens pas à remplir (Ajax) les deux listes ajoutées par la méthode addRow car elles sont apparement inaccessibles.
    Firefox me renvoie "document.forms.frm_produit2.chp_mar_mob has no properties".
    J'ai testé avec un simple champ input mais c'est le mm pb, rien n'est considéré comme ajouté au formulaire en question.

    Maintenant le code que je vous dépouille pour éclaircir:

    HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [...]
    <form name="frm_produit2" action="truc.php" method="GET" onSubmit="javascript:return(false);">
    [...]
    <tr><td colspan="2"><table id="table_suppl"></table></td></tr>
    Les lignes seront donc ajoutées au tableau d'id "table_suppl"...

    Contrôle AJAX lorsqu'on saisi l'identifiant dans un input sur la 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
    19
    20
    21
    function remplir_FabTypAch(obj) 
    {
    	montre("bloc",1);
    	var t_num = obj.responseXML.getElementsByTagName('donnee');
    	encours = t_num [0].getAttribute("encours");
    	trouve = t_num [0].getAttribute("trouve");
    	inconnu = t_num [0].getAttribute("inconnu");
    	typ = document.getElementById("xml_typ");
    	fab = document.getElementById("xml_fab");
    	liste_fam = document.forms.frm_produit2.chp_fam_sym;
    	liste_sym = document.forms.frm_produit2.chp_sym;
    	if (inconnu == 1)
    	{
    		lib1 = "Marque : ";
    		lib2 = "Modèle : ";
    		val1 = "<select name='chp_mar_mob' style='width:150px;' size='1' class='selectone_std' onFocus='chg_focus(this);' onBlur='chg_focus(this);' onchange='javascript:charge_symptome(this.value);' onclick='javascript:document.forms.frm_produit2.chp_mar.value=this.value';></select>";
    		val2 = "<select name='chp_mod_mob' style='width:150px;' size='1' class='selectone_std' onFocus='chg_focus(this);' onBlur='chg_focus(this);' onchange='javascript:document.forms.frm_produit2.chp_mod.value=this.value;'></select>";
    		AddRow("table_suppl","ligne1",lib1,val1);
    		AddRow("table_suppl","ligne2",lib2,val2);
    		charge_mob("marque");
    	}
    Là vous voyez qu'à la fin de cette fonction de callBack ajax, j'ajoute deux lignes <tr> (par la méthode AddRow) ayant respectivement pour paramètres de fonction l'id du tableau, l'id de la ligne, le contenu de la cellule 1 (libellé du select), le contenu de la cellule 2 (le select). J'ajoute donc deux lignes, deux select au tableau.
    Ensuite j'appelle la fonction charge_mob("marque") qui va charger dans la première liste créée, une liste de marques.

    fonction charge_mob() avec son callback:
    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
     
    function charge_mob(typ)
    {
    	var XHR = new XHRConnection();
    	XHR.appendData("typ", typ);
    	XHR.sendAndLoad("xml/charge_mob.php", "GET", back_charge_mob);
    }
    function back_charge_mob(obj) 
    {
    	var liste_mar = document.forms.frm_produit2.chp_mar_mob;	
    	var t_num= obj.responseXML.getElementsByTagName('donnee');
    	if (t_num.length > 0)
    	{		
    		charge_aspect();
    		num= t_num[0];
    		var t_mar = obj.responseXML.getElementsByTagName('marque');
    		liste_mar.options.length = 0;
    		liste_mar.options[liste_mar.options.length] = new Option ("", "");
    		for (var i = 0; i < t_mar.length; i++)
    		{
    			marque = t_mar[i];
    			liste_mar.options[liste_mar.options.length] = new Option (marque.getAttribute("nom"), marque.getAttribute("id"));
    			if (marque.getAttribute("sel") == "O")
    				liste_mar.selectedIndex = liste_mar.options.length - 1;
    		}
    	}
    }
    L'ERREUR :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var liste_mar = document.forms.frm_produit2.chp_mar_mob;
    Me renvoie une erreur car chp_mar_mob (nom du select) n'est a priori pas accessible. Pourtant lorque je fais une selection manuelle sur firefox et que je regarde le code source, les deux select sont bien présents et parfaitement configurés. De plus j'utilise la mm formulation dans une autre appli et ça fonctionne.... -_-'

    JE NE PIGE PAS DU TOUT!!
    D'autant que ça marche sur une autre appli et par le mm système!
    J'ai eu beau reprendre tout le code, c'est incompréhensible.

    Merci de me trouver la ptite boulette, je sature de chercher...

  2. #2
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Ca bloque tout mon projet! Personne peut jetter un oeil? Je sûr que l'erreur est bête comme tout.

  3. #3
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Oops je vous ai pas montré ma méthode addRow...important!
    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
     
    function AddRow(idtable, id, val1,val2){
        var newRow = document.getElementById(idtable).insertRow(-1);
    	newRow.id = id;
     
    	newCell = newRow.insertCell(0);
    	newCell.id = id+"_cel1";
     
    	newCell.innerHTML = val1;
    	newCell.className = "td_mob_titre";
     
        newCell = newRow.insertCell(1);
    	newCell.id = id+"_cel2";
    	newCell.className = "td_saisie_lib";	
        newCell.innerHTML = val2;
     
    }
    Voilà, mais je ne pense pas que l'erreur vienne de là.

    Je peux correctement appeler les élements input etc... de mon formulaire sauf ceux que j'ai créé avec addRow, mais je vois bien ces derniers sur la page et dans le code source (par sélection firefox). Strange...very strange....j'en peux plus je suis bloqué!

  4. #4
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Bon ben vous êtes pas motivés pour m'aider!

    J'ai laissé béton, apparement, la méthode newRow n'est pas très flexible avec Ajax. J'ai vulgairement choisi la propriété CSS display comme paliatif...c'est suffisant...dommage....

    tchaw

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

Discussions similaires

  1. [1.x] Création d'un objet, form non valide et vide
    Par insane1 dans le forum Symfony
    Réponses: 3
    Dernier message: 02/11/2010, 09h20
  2. [forms 10g] Rendre Bouton De Commande Non Accessible
    Par lolafrite dans le forum Forms
    Réponses: 5
    Dernier message: 21/03/2007, 17h20
  3. Constructeur non accessible
    Par mathieu dans le forum C++
    Réponses: 1
    Dernier message: 03/09/2006, 23h43
  4. [CR 9] Mise en forme non affichée when null
    Par Yorglaa dans le forum Formules
    Réponses: 2
    Dernier message: 28/06/2004, 17h27
  5. Capture d'une form non visible
    Par Linkin dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/04/2004, 14h58

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