Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transformer input en texte

Sujet résolu
Anonyme
    20 juin 2011 à 23:02:32

    Bonjour,
    Je développe javascript depuis pas longtemps, alors il me manque des éléments de bases pour continuer.
    J'ai un tableau html, qui contient des lignes, et lorsque l'on clique sur l'une d'entre elles alors les cellules ce transforment en input ou on peut modifier les valeurs. En faite j'ai modifié la valeur des cellule avec id_cellule.innerhtml="<input etc />".
    Le problème est que je n'arrive pas à les re-transformer en cellule normal lorsque je valide mes modification.
    J’espère avoir était assez concret.
    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2011 à 23:06:15

      Pour finir de concrétiser, il ne manque plus que ton code.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        20 juin 2011 à 23:15:55

        D'accord, je passe le tableau html ^^
        Voila la fonction qui ajoute des input dans les cellules :
        function modifier(id) { //je récupère l'id de la ligne à modifier
        colonne = id + "-1";
        chaine = document.getElementById(colonne).innerHTML;
        modif_courant=chaine.indexOf("input",1);
        if (modif_courant != 1 ) {
        	document.getElementById(id).style.background="aad7fa";
        		for (i=1; i<=8; i++) { // on parcours les cellules de la ligne
        			if (i != 8 && i !=7 && i !=6) {
        			colonne= id + "-" + i;
        			contenu = document.getElementById(colonne).innerHTML;
        			document.getElementById(colonne).innerHTML='<input class="input_dcc" type="text" value="' + contenu + '" id="'+ colonne +'-'+i+'"/>';
        			}		
        			else if (i ==6){
        			colonne= id + "-" + i;
        			contenu = document.getElementById(colonne).innerHTML;
        //ici une liste déroulante générer en php, je sais pas si c'est bien ...	
        			document.getElementById(colonne).innerHTML=''; 	
        			}
        			else if (i==7) {
        			colonne= id + "-" + i;
        			document.getElementById("in"+colonne).innerHTML='<input id="in'+colonne+'-'+i+'" class="valider_enreg" type="button" onclick="bt_valider_enreg(this.id);" value="OK">';			
        			}
        			else if (i==8) {
        			colonne= id + "-" + i;
        			document.getElementById("in"+colonne).innerHTML='<input id="in'+colonne+'-'+i+'" class="valider_enreg" type="button" onclick="bt_valider_enreg(this.id);" value="Lier">';			
        			}			
        		}
        }
        }
        

        Maintenant c'est le chemin inverse que je veux faire : récupérer les valeurs des input (ça c'est facile), enlever les input des cellules (plus dur) et ajouter les valeurs.
        Merci :)
        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2011 à 0:47:22

          Une fois que tu as récupérer le value d'un input d'une cellule, tu peux simplement faire un innerHTML de ce "value".

          Ca écrasera l'input et le remplacera par le texte du value.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            21 juin 2011 à 8:40:14

            Merci.
            Oui c'est ce que je pensais faire, mais ça ne fonctionne pas, je re-essaye à midi en rentrant chez moi et je vous tient au courant.
            • Partager sur Facebook
            • Partager sur Twitter
              21 juin 2011 à 8:44:37

              Tu donneras le code que tu as essayé.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                21 juin 2011 à 13:06:29

                Voila le code que je viens de faire :
                function bt_valider_enreg(id) {
                id_ligne=id.indexOf('-');
                id_ligne=id.substr(2,id_ligne-2); //C'est du formatage, c'est pas important
                alert(id_ligne);
                for (i=1; i<=7; i++) {
                	if (i != 6 && i !=7) {
                	colonne_tr = "opl"+id_ligne + "-" + i; //id de la cellule courante
                	colonne_input= "opl" + id_ligne + "-" + i + "-" +i; //id de l'input de la cellule courante
                	contenu = document.getElementById(colonne_input).value; //on stock le contenu de l'input...
                	document.getElementById(colonne_tr).value=contenu; //...pour le placer dans la cellule
                	alert(colonne_tr);
                	}
                	else {
                	//document.getElementById("").style.display="none";
                	}
                }
                //document.getElementById(id_ligne).style.background="";
                }
                

                Ce code s’exécute mais les inputs reste en place, les id sont bon. J'ai essayé de faire document.getElementById(colonne_tr).value="" (colonne_tr c'est l'id de la cellule) mais c'est pareil.
                C'est bizare, je pense que c'est une règle que je ne connais pas qui me bloque.
                Merci d'avance. :)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  21 juin 2011 à 13:44:18


                  Est-ce bien nécessaire de transformer les inputs en valeurs ? En toutes hypothèses ce serait inutile s'il s'agissait d'enregistrer les modifications opérées.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    21 juin 2011 à 15:28:03

                    En faite, lors du clique sur le bouton valider, les modification sont répercutés dans la base de données (via une requête xmlhttprequest), je veux donc que le tableau reprenne son aspect normal, sans les inputs, et sans recharger la page. L’intérêt est là.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 juin 2011 à 15:35:34

                      Hey,

                      Rajoute des var partout ou y en a pas ;)
                      Enfin, suis le conseil de Golmote, ca manque d'innerHTML ton code :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        21 juin 2011 à 15:43:55

                        D'accord je vais rajouter des déclarations. Par contre j'ai essayé avec des innerHTML, et le contenu des cellules ne changent pas, alors qu'il y a bien une valeur dans ma variable contenu. J'essai ça après 17h.
                        Merci :)

                        EDIT :
                        Je viens d'essayer avec les var, et ça ne change rien."alert(document.getElementById(colonne_tr).value)" le navigateur me renvoi undefined alors que l'id existe. Je ne comprend pas...
                        Je vous laisse mon code :
                        function bt_valider_enreg(id) {
                        var id_ligne=id.indexOf('-');
                        id_ligne=id.substr(2,id_ligne-2);
                        for (i=1; i<=7; i++) {
                        	if (i != 6 && i !=7) {
                        	var colonne_tr = "opl"+id_ligne + "-" + i; //id de la cellule courante
                        	var colonne_input= "opl" + id_ligne + "-" + i + "-" + i; //id de l'input de la cellule courante
                        	var contenu = document.getElementById(colonne_input).value; //on stock le contenu de l'input...
                        	alert(document.getElementById(colonne_tr).value);
                        	document.getElementById(colonne_tr).value=contenu; //...pour le placer dans la cellule
                        	alert(document.getElementById(colonne_tr).value);
                        	}
                        	else {
                        	
                        	}
                        }
                        
                        }
                        

                        Merci à ceux qui sauront m'aider ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 juin 2011 à 19:27:03

                          Mais pourquoi value sur les tr ?! innerHTML on a dit !
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            21 juin 2011 à 19:41:22

                            Oui, mais c'est que j'ai essayé avec les .innerhtml, puis après j'ai re-essayé avec les .value, et après j'ai écrit mon post ^^.
                            Le résultat est le même, le code s'exécute sans erreur mais les inputs ne disparaissent pas.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 juin 2011 à 21:01:17

                              Donne un code testable sur JSFiddle.

                              http://jsfiddle.net/
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                21 juin 2011 à 22:02:15

                                Tu devrais utiliser la dom plutôt que innerhtml
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  21 juin 2011 à 23:34:54

                                  J'ai essayé de reproduire mon code ici : http://jsfiddle.net/doRian07S/HsSzb/11/
                                  Et ici j'ai mis mon code concerné : http://jsfiddle.net/doRian07S/UC8n2/4/
                                  Et pour ce qui est de la dom, je ne connais (presque) pas...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 juin 2011 à 23:38:50

                                    innerHTML ! Les majuscules sont importantes en JS. Comme dans getElementById.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      21 juin 2011 à 23:56:59

                                      Merci beaucoup, Je ne savais pas que la case était importante, c'est mieus. Lorsque j’exécute mon script avec des points d’arrêts, tout ce passe bien, sauf lorsque le curseur quitte la fonction, à ce moment là, tout les inputs réapparaissent !
                                      La je ne comprend pas du tout, il faut p-e effectuer autre chose après l'affectation avec innerHTML pour conserver les changements ?

                                      En tout cas merci, je sais déjà que mon code est correcte jusque là.
                                      EDIT : Enfaite, c'est qu'une autre boucle était appeler aprés, sans que je m'en sois rendu compte, donc tout marche trés bien !

                                      Merci beaucoup à tout ce qui m'ont aidé pour ce problème, en particulier Golmote !
                                      ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Transformer input en texte

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown