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 :

transformer un <td> en zone textarea sur un clic


Sujet :

JavaScript

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut transformer un <td> en zone textarea sur un clic
    Bonjour,

    Je souhaite faire un truc sympa sur l'admin de mon site, mais je dois reconnaître être une pine en javascript.

    Voilà ce que je voudrais :
    J'ai une liste de message, qui s'affiche dans un tableau, chaque message dans une cellule <td>.
    En cliquant sur celle-ci, ou éventuellement en cliquant sur un bouton "modifier", je voudrais que le <td> se tranforme en <textarea> avec le contenu à l'intérieur, pret à modifier. Puis je valide et zou, pas besoin de changer de page.

    Pourriez-vous m'aider à faire cela s'ils-vous plait ?

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Je pense qu'il faudrait faire un truc dans le style, tu peux chercher dans cette voie là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ajout(){
       tmp = document.getElementById("texte").firstChild.nodeValue;
     
       document.getElementById("test").removeChild(document.getElementById("texte"));
     
       divtexte = document.createElement("textarea");
     
       document.getElementById("test").appendChild(divtexte);
       divtexte.appendChild(tmp);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <table>
       <tr>
          <td id="test" onclick="ajout();">
             <div id="texte">Ceci est un test.</div>
          </td>
       </tr>
    </table>

  3. #3
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Merci pour ta réponse BisounoursJos !

    Par contre ça marche pas du tout... En fait il ne se passe rien quand on clique dessus, pour mieux dire.

  4. #4
    Membre éclairé Avatar de Sheriff
    Inscrit en
    Octobre 2004
    Messages
    608
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 608
    Points : 718
    Points
    718
    Par défaut
    salut !
    tu peux avoir dans ledit td un div et un text area...
    il te suffira d'alterner les attributs display pour basculer entre les deux...
    tu modifiera le div avec la propriété innerHTML et le textarea avec la propriété value.
    @+
    Que votre situation soit bonne ou mauvaise, cela va changer...

  5. #5
    Membre habitué Avatar de lalouve
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2004
    Messages : 128
    Points : 145
    Points
    145
    Par défaut
    Salut,

    le code de BisounoursJos fonctionne avec juste 1 modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function ajout(){
       tmp = document.getElementById("texte").firstChild.nodeValue;
     
       document.getElementById("test").removeChild(document.getElementById("texte"));
     
       divtexte = document.createElement("textarea");
     
       document.getElementById("test").appendChild(divtexte);
       divtexte.innerHTML = tmp; // Cette ligne a changé
    }
    if (navigator.geolocation) { //do your magic }

  6. #6
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Ok merci pour toutes vos réponses.

    Alors voilà ce qui se passe avec le code Lalouve :

    J'ai ma liste de 10 messages, chacun dans un <td> du tableau.
    Je clique n'importe lequel des 10 messages et c'est le premier de la liste qui se retrouve dans un tout petit textarea.
    Ensuite je ne peux plus en cliquer aucun, ni revenir à l'affichage normal sans textarea.

    Pour que ce soit au poil, il faudrait donc :

    - Pouvoir attribuer une taille au textarea (qui d'ailleur doit s'insérer dans un form avec submit)
    - Que le message cliqué soit celui qui se transforme en textarea.
    - Pouvoir en cliquer plusieurs et non qu'un seul et si possible tous les valider au besoin.

    Après y'a un autre souci d'affichage à cause d'une autre div, mais si on peut régler ça d'abord le reste je peux me débrouiller.
    J'espère que je ne m'abuse pas trop

  7. #7
    Membre habitué Avatar de lalouve
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2004
    Messages : 128
    Points : 145
    Points
    145
    Par défaut
    Voilà tu devrais pouvoir te débrouiller avec ça

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html>
    <head>
    	<title>Test edit td</title>
    	<script type="text/javascript">
    	function ajout(td, id_ligne){
    	  if(td.getAttribute("clicked")==1)return
    	  td.setAttribute("clicked", "1");
    	   tmp = td.firstChild.nodeValue;
    	   td.removeChild(td.firstChild);
     
    	   divform = document.createElement("form");
    	   divform.setAttribute("action", "taPagePHP.php");
    	   divform.setAttribute("method", "post");
     
    	   formSubmit = document.createElement("input");
    	   formSubmit.setAttribute("type","submit");
    	   formSubmit.setAttribute("value","Enregistrer");
     
    	   formCancel = document.createElement("input");
    	   formCancel.setAttribute("type","button");
    	   formCancel.setAttribute("value","Annuler");
     
    	   formHidden = document.createElement("input");
    	   formHidden.setAttribute("type","hidden");
    	   formHidden.setAttribute("value",id_ligne);
     
    	   formCancel.onclick = function(){
    	   	td.innerHTML = tmp;
    		td.setAttribute("clicked", "0");
    	   }
     
    	   divtexte = document.createElement("textarea");
     
    	   divform.appendChild(divtexte);
    	   divform.appendChild(formSubmit);
    	   divform.appendChild(formCancel);
    	   divform.appendChild(formHidden);
     
    	   td.appendChild(divform);
    	   divtexte.innerHTML = tmp;
    	}
    	</script>
    	<style type="text/css">
    	textarea{
    	width:200px;
    	height:50px;
    	font-family:arial;
    	font-size:11px;}
    	</style>
    </head>
     
    <body>
    <table>
       <tr>
          <td onclick="ajout(this, 1);">
             Ceci est un test.
          </td>
       </tr>
       <tr>
          <td onclick="ajout(this, 2);">
             Ceci est un autre test.
          </td>
       </tr>
       <tr>
          <td onclick="ajout(this, 3);">
             Ceci est encore un autre test.
          </td>
       </tr>
    </table>
     
     
    </body>
    </html>
    if (navigator.geolocation) { //do your magic }

  8. #8
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Génial, un grand merci à toi Lalouve (et à Sheriff et BisounoursJos aussi )

    Petit problème quand même, ça ne fonctionne pas sur IE. Comme c'est pour mon admin c'est pas trop grave mais bon...
    Sinon la solution de Sheriff aurait pu être bien à creuser aussi, parce que justement le contenu de mon <td> est déjà dans un div (qui me sert pour utiliser overflow auto).

  9. #9
    Membre habitué Avatar de lalouve
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2004
    Messages : 128
    Points : 145
    Points
    145
    Par défaut
    Y'a pas de quoi

    Par contre ça fonctionne bien sous IE chez moi (je viens de retester pour la forme).
    if (navigator.geolocation) { //do your magic }

  10. #10
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Bah c'est parce que j'ai testé sur IE7 peut être ?

Discussions similaires

  1. Ajouter du texte dans une zone textarea
    Par isitien dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/04/2012, 14h16
  2. ecriture en Gras dans une zone textarea
    Par AsmaHaj dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/05/2007, 07h34
  3. affichage zone flottante sur onmouseover
    Par kahya dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/06/2006, 14h13
  4. Clic dans une zone deffini sur une image
    Par patoch76 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/04/2006, 12h07
  5. Réponses: 4
    Dernier message: 21/07/2004, 10h51

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