Partage
  • Partager sur Facebook
  • Partager sur Twitter

Changer le contenu d'un div par le clic

    30 décembre 2008 à 20:40:46

    Hello à tous.
    J'ai lu quelques trucs de Javascript et j'avais donc envie de faire en sorte qu'un texte, lors du clic sur ce dernier, devienne un bô form avec un textaera pour pouvoir le modifier.
    Voilà mon code:
    <script type="text/javascript">
    function changer() {
    	var div = document.getElementById("biographie");
    	div.innerHTML = '<form method="post"><textarea name="biographie" rows="7" cols="60">{USER_BIOGRAPHIE}</textarea><input type="submit" value="Modifier" disabled/></form>';
    }
    </script>
    <br />{L_CHARACTER_BIOGRAPHIE} : <div id="biographie" onmouseclick="changer()"><b>{USER_BIOGRAPHIE}</b></div><br /><br />
    


    Le problème: quand je clique sur le texte, il ne se passe rien!

    Merci d'avance pour votre aide, val'
    • Partager sur Facebook
    • Partager sur Twitter
      30 décembre 2008 à 23:28:48

      Mets juste "onclick". Pas "onmouseclick". ^^

      (Avec quoi veux-tu cliquer à part la souris ? o_O )
      • Partager sur Facebook
      • Partager sur Twitter
        31 décembre 2008 à 14:07:19

        Ca ne marche toujours pas =/

        EDIT: je crois que j'ai trouvé le problème: lorsque la bio contient des accents, le texte à mettre se retrouve coupé. Et donc ça bug...
        Maintenant je sais pas comment faire... En PHP oui mais en javascript ?... ^^

        EDIT²: j'ai appliqué addslashes() sur la biographie (là où {USER_BIOGRAPHIE} est définie) mais ça ne marche quand même pas. Pourtant les slashes sont bien là. Je comprends pas comment faire pour les échapper...
        • Partager sur Facebook
        • Partager sur Twitter
          1 janvier 2009 à 14:20:00

          Petit up =/
          =>
          Comment faire pour échapper les apostrophes?
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            1 janvier 2009 à 14:58:36

            donne le html génére. Je parie que t'as des saut de ligne dans le texte (des \n, pas des <br>)?
            • Partager sur Facebook
            • Partager sur Twitter
              1 janvier 2009 à 15:00:37

              Ah oui effectivement:

              Citation : code source


              function changer() {
              var div = document.getElementById("biographie");
              div.innerHTML = '<form method="post"><textarea name="biographie" rows="7" cols="60">J\'ai apris à me battre avec le vieu maitre Kenshyn, à Mensile!
              Il savait exactement comment controler les éléments!
              Peu avant sa mort il me confia une quete, je devais sauver le royaume de PliMouth!
              Avec d\'autre soldats j\'y arriverai certainement!
              Aujourd\'hui je cherche des groupes pour m\'aider dans ma quete !!!</textarea><input type="submit" value="Modifier" disabled/></form>';
              }


              Je fais un preg_replace() qui remplace les \n par des <br /> donc?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                1 janvier 2009 à 15:15:42

                ouais, mais un str_replace peut peut-etre suffire. (remplace par un espace, sinon tout va être collé aussi)
                • Partager sur Facebook
                • Partager sur Twitter
                  1 janvier 2009 à 15:20:31

                  Le mieux est de mettre le contenu de ce que tu veux afficher dans un div que tu va cacher et afficher selon le click de l'utilisateur. Veille à le cacher en javascript afin que ceux qui n'ont pas le javascript activé puisse le modifier quand meme ;) :
                  <br />{L_CHARACTER_BIOGRAPHIE} : <div id="biographie" class="shown"><b>{USER_BIOGRAPHIE}</b></div>
                  <form method="post" id="biographie_edit" class="hidden">
                     <textarea name="biographie" rows="7" cols="60">{USER_BIOGRAPHIE}</textarea>
                     <input type="submit" value="Modifier" disabled/>
                  </form>
                  <br /><br />
                  

                  Et le js :
                  function Init() {
                  	var aNodes = getElementsByClassName("hidden").concat(getElementsByClassName("shown"));
                  	for(var i=0, item; item = aNodes[i]; i++) {
                  		item.show = function() {
                  			this.style.display = "block";
                  		};
                  		item.hide = function() {
                  			this.style.display = "none";
                  		};
                  		item.change = function() {
                  			if(this.style.display == "block") {
                  				this.hide();
                  			}else {
                  				this.show();
                  			}
                  		};
                  		if(item.className == "hidden"){
                  			item.hide();
                  		} else if(item.className == "shown"){
                  			item.show();
                  		}
                  	}
                  }
                  
                  //Pour rajouter un événement
                  function addEvent(obj_, event_, fct_) {
                  	if(obj_.addEventListener) {
                  		obj_.addEventListener(event_, fct_, true);	
                  	}
                  	else if(obj_.attachEvent && !(/this\./g.test(fct_.valueOf()))) {
                  		obj_.attachEvent('on' + event_, fct_);
                  	}
                  	else {
                  		obj_['on' + event_] = fct_;
                  	}
                  }
                  
                  //Fonction pour récuperer les éléments par leur classe
                  function getElementsByClassName(className, tag, elm){
                  	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
                  	var tag = tag || "*";
                  	var elm = elm || document;
                  	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
                  	var returnElements = [];
                  	var current;
                  	var length = elements.length;
                  	for(var i=0; i<length; i++){
                  		current = elements[i];
                  		if(testClass.test(current.className)){
                  			returnElements.push(current);
                  		}
                  	}
                  	return returnElements;
                  }
                  
                  addEvent(window, "load", Init);
                  addEvent(document.getElementById("biographie"), "click", function() { 
                  document.getElementById("biographie_edit").show();
                  document.getElementById("biographie").hide(); });
                  

                  Voila, c'est mieux pour l'accessibilité du site ;) .

                  EDIT: les codes que j'ai posté peuvent permettre de faire d'autre chose que ton cas en particulier. Voila un code qui est adapté à ton cas, moins flexible donc, mais plus court ;) :
                  <br />{L_CHARACTER_BIOGRAPHIE} : <div id="biographie"><b>{USER_BIOGRAPHIE}</b></div>
                  <form method="post" id="biographie_edit">
                     <textarea name="biographie" rows="7" cols="60">{USER_BIOGRAPHIE}</textarea>
                     <input type="submit" value="Modifier" disabled/>
                  </form>
                  <br /><br />
                  

                  //Pour rajouter un événement
                  function addEvent(obj_, event_, fct_) {
                  	if(obj_.addEventListener) {
                  		obj_.addEventListener(event_, fct_, true);	
                  	}
                  	else if(obj_.attachEvent && !(/this\./g.test(fct_.valueOf()))) {
                  		obj_.attachEvent('on' + event_, fct_);
                  	}
                  	else {
                  		obj_['on' + event_] = fct_;
                  	}
                  }
                  
                  addEvent(window, "load", function() { document.getElementById("biographie_edit").style.display = "none"; });
                  addEvent(document.getElementById("biographie"), "click", function() { 
                  document.getElementById("biographie_edit").style.diplay = "block";
                  document.getElementById("biographie").style.display = "none" });
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 janvier 2009 à 15:24:09

                    'USER_BIOGRAPHIE' => str_replace('\n', ' <br /> ', addslashes($user->biography)),

                    J'ai fait ça. Mais ça n'a rien changé.

                    Citation : Code Source


                    <script type="text/javascript">
                    function changer() {
                    var div = document.getElementById("biographie");
                    div.innerHTML = '<form method="post"><textarea name="biographie" rows="7" cols="60">J\'ai apris à me battre avec le vieu maitre Kenshyn, à Mensile!
                    Il savait exactement comment controler les éléments!
                    Peu avant sa mort il me confia une quete, je devais sauver le royaume de PliMouth!
                    Avec d\'autre soldats j\'y arriverai certainement!
                    Aujourd\'hui je cherche des groupes pour m\'aider dans ma quete !!!</textarea><input type="submit" value="Modifier" disabled/></form>';
                    }
                    </script>



                    Bon bah je te fais confiance Timot ^_^ !!
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      1 janvier 2009 à 19:17:47

                      met des " au lieu des ' dans php
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Changer le contenu d'un div par le clic

                      × 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