Partage
  • Partager sur Facebook
  • Partager sur Twitter

Onclick qui ne fonctionne pas

Sujet résolu
Anonyme
    28 novembre 2011 à 10:00:17

    Bonjour à tous !

    Je suis en train de programmer mon forum et j'en suis au système de citation, seulement, l'onclick ne fait rien. En le remplaçant par un alert, ça le fait. Donc je ne comprends pas.

    Voici mon petit bout de code :

    <input type="button" value="Citer" onclick="var query = document.querySelector('#contenu_<?php echo $id;?>'), query_deux = document.querySelector('#posteur_<?php echo $id;?>'); insertTag('<div id='fieldset'><fieldset><legend><?php echo'<script>query_deux.innerHTML</script>';?></legend><?php echo'<script>query.innerHTML</script>';?>', '</fieldset></div>', '<?php $id_textarea = 'id_textarea'; echo $id_textarea; ?>');" />
    

    Et voilà ma fonction insertTag :

    function insertTag(startTag, endTag, textareaId, tagType)
    {
    	var field = document.getElementById(textareaId);
    	var scroll = field.scrollTop;
    	field.focus();
    	
    	if (window.ActiveXObject)
    	{
    		var textRange = document.selection.createRange();            
    		var currentSelection = textRange.text;
    	}
    	else
    	{
    		var startSelection   = field.value.substring(0, field.selectionStart);
    		var currentSelection = field.value.substring(field.selectionStart, field.selectionEnd);
    		var endSelection     = field.value.substring(field.selectionEnd);
    	}
    	if (tagType)
    	{
    		switch (tagType)
    		{
    			case "url":
    				endTag = "</a>";
    					if (currentSelection)
    					{
    						if (currentSelection.indexOf("http://") == 0 || currentSelection.indexOf("https://") == 0 || currentSelection.indexOf("ftp://") == 0 || currentSelection.indexOf("www.") == 0)
    						{
    							var label = prompt("Quel est le libellé du lien ?") || "";
    							startTag = "<a href=\"" + currentSelection + "\">";
    							currentSelection = label;
    						}
    						else
    						{
    							var URL = prompt("Quelle est l'url ?");
    							startTag = "<a href=\"" + URL + "\">";
    						}
    					} 
    					else
    					{
    						var URL = prompt("Quelle est l'url ?") || "";
    						var label = prompt("Quel est le libellé du lien ?") || "";
    						startTag = "<a href=\"" + URL + "\">";
    						currentSelection = label;                     
    					}
    				break;
                            case "img":
                                    endTag = '';
                                            if (currentSelection)
    					{
    						if (currentSelection.indexOf("http://") == 0 || currentSelection.indexOf("https://") == 0 || currentSelection.indexOf("ftp://") == 0 || currentSelection.indexOf("www.") == 0)
    						{
                                                            endTag = "\" />"
    							startTag = "<img src=\"";
    						}
    						else
    						{
    							var URL = prompt("Quelle est l'url ?");
    							startTag = "<img src=\"" + URL + "\" />";
    						}
    					} 
    					else
    					{
    						var URL = prompt("Quelle est l'url ?") || "";
    						startTag = "<img src=\"" + URL + "\" />";
    					}
                                break;
                                
                                case "textarea":
                                  endTag = '</textarea>';
                                      var COLS = prompt("Quelle est la largeur du champ ?") || "";
                                      var ROWS = prompt("Quelle est la hauteur du champ ?") || "";
                                     startTag = "<textarea cols=\"" + COLS + "\" rows=\"" + ROWS + "\">";
                                     currentSelection = '';
    		}
                                    
    	}
    	if (window.ActiveXObject)
    	{
    		textRange.text = startTag + currentSelection + endTag;
    		textRange.moveStart('character', -endTag.length-currentSelection.length);
    		textRange.moveEnd('character', -endTag.length);
    		textRange.select();  
    	}
    	else
    	{
    		field.value = startSelection + startTag + currentSelection + endTag + endSelection;
    		field.focus();
    		field.setSelectionRange(startSelection.length + startTag.length, startSelection.length + startTag.length + currentSelection.length);
    	}
    	field.scrollTop = scroll;
    }
    


    Merci d'avance !
    Bblfunky.
    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2011 à 11:29:46

      Tu n'as pas une erreur javascript dans la console ?
      • Partager sur Facebook
      • Partager sur Twitter
      Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
      Anonyme
        28 novembre 2011 à 11:36:49

        Non, j'ai juste des avertissements qui ne correspondent pas à mon code.
        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2011 à 13:50:59

          Il y a pas mal d'erreur il me semble.
          et c'est pas tres beau de faire les appel js comme ça dans le html!!!
          <input type="button" value="Citer" 
          onclick="
          	var query = document.querySelector('#contenu_<?php echo $id;?>'); 
          	query_deux = document.querySelector('#posteur_<?php echo $id;?>'); 
          	insertTag(
          		'<div id=\'fieldset\'><fieldset><legend><script>query_deux.innerHTML</script></legend><script>query.innerHTML</script>',
          		'</fieldset></div>', 
          		'id_textarea',
          		'Il_manque_le_tagType_ici');" />
          
          • Partager sur Facebook
          • Partager sur Twitter
          Never Trust User Input This is the truth
            28 novembre 2011 à 14:08:00

            Comme il a dit le monsieur au dessus c'est pas beau! Fait plutot appel a une fonction.
            • Partager sur Facebook
            • Partager sur Twitter
            $2b||!$2b
            Anonyme
              28 novembre 2011 à 14:26:22

              Bonjour !

              Merci ! Ca fonctionne, malheureusement, il y a un bug :
              Quand j’appuie sur le bouton citer, il me met :
              "<div id='fieldset'><fieldset><legend><script>query_deux.innerHTML</script></legend><script>query.innerHTML</script></fieldset></div>"

              Alors qu'il devrait afficher le posteur et le contenu de son message ... Il n'exécute pas le <script></script>, comment faire ? :o

              (désolé, je ne suis pas très fort en JS ...)
              • Partager sur Facebook
              • Partager sur Twitter
                28 novembre 2011 à 14:46:24

                D'où l'interet de passer par une fonction =)
                • Partager sur Facebook
                • Partager sur Twitter
                $2b||!$2b
                Anonyme
                  28 novembre 2011 à 14:47:36

                  Par exemple ? (un schéma vite fait)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 novembre 2011 à 14:51:30

                    Si tu veux insérer du HTML il faut utiliser innerHTML, sinon c'est considéré comme une string et pas interprété par le navigateur (tu utilises .value je crois).

                    Exemple simple :
                    document.body.innerHTML = '<span>a</span>'; // affiche a
                    document.body.textContent = '<span>a</span>'; // affiche <span>a</span>
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      28 novembre 2011 à 14:53:33

                      Je ne vois pas où je dois le mettre ni à quoi ça va me servir ...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 novembre 2011 à 15:03:56

                        En vite fait voici comment faire !!!
                        A toi d'adapter et de terminer le code !!!


                        Voici le html
                        <input type="button" value="Citer" 
                        onclick="prepareInsertTag(id);" />
                        


                        voici le JS


                        var query = '';
                        var query_deux = '';
                        function prepareInsertTag(id){
                        query = document.querySelector('#contenu_'+id); 
                        query_deux = document.querySelector('#posteur_'+id);
                        start = document.getElementById('#fieldset');
                        start.innerHTML = query_deux;
                        //[...] Déclaration des autre variable nécéssaire a l'appel de insertTag [...]
                        
                        // appel de insertTag();
                        insertTag(start,end,textareaId,tagType);
                        }
                        

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Never Trust User Input This is the truth
                        Anonyme
                          28 novembre 2011 à 15:12:38

                          Merci ! Mais je ne comprends pas le "//[...] Déclaration des autre variable nécéssaire a l'appel de insertTag [...]" ... Il n'y a pas d'autres variables ...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 novembre 2011 à 15:15:35

                            elle prend bien 4 paramètres ta fonction insertTag ? je n'en ai déclaré qu'un seul (dans l'exemple manque : end , textareaId , tagType
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Never Trust User Input This is the truth
                            Anonyme
                              28 novembre 2011 à 15:16:18

                              D'accord. Merci. Je l'adapte et je te tiens au courant.

                              EDIT : Voilà, je l'ai adapté, mais je me retrouve avec un problème, voici mon code :

                              HTML:

                              <input type="button" value="Citer" 
                              onclick="prepareInsertTag(<?php echo $donnees['id'];?>);" />
                              

                              Code JS :

                              <script>
                              	function prepareInsertTag(id){
                              		var query = '',
                              		query_deux = '',
                              		start = '',
                              		textareaId = 'id_textarea',
                              		end = '</fildset></div>';
                              		
                              		query = document.querySelector('#contenu_'+id); 
                              		query_deux = document.querySelector('#posteur_'+id);
                              		start = '<div id="fieldset"><fieldset><legend>' + query_deux + '</legend>' + query;
                              		
                              		insertTag(start,end,textareaId);
                              	}
                              </script>
                              


                              Le problème est que au lieu de me mettre le posteur et le contenu, il me met "[object HTMLTableCellElement]" ... Qu'est-ce ? Oo"
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Onclick qui ne fonctionne pas

                              × 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