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 :

Plusieurs formulaires et récupération d'élément


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut Plusieurs formulaires et récupération d'élément
    Bonjour tout le monde,

    Alors voilà, j'ai une page avec plusieurs formulaires dans lesquels on peut insérer des émoticones en JS.

    Mon script fonctionne s'il n'y a qu'un seul formulaire, mais ne fonctionne plus s'il y en a plusieurs.

    Voici les codes :

    Le JS :

    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
     
    <script language="JavaScript" type="text/javascript">
    function emoticon(text)
    {
    	var txtarea = document.commentaire.message;
    	text = ' ' + text + ' ';
    	 if (txtarea.selectionEnd >= 0 && txtarea.setSelectionRange)
    	 { 
    		var textLength = txtarea.textLength;
    		var selEnd = txtarea.selectionEnd;
    		var s1 = (txtarea.value).substring(0, selEnd);
    		var s2 = (txtarea.value).substring(selEnd, textLength);
    		txtarea.value = s1 + text + s2;
    		txtarea.setSelectionRange(selEnd+text.length, selEnd+text.length);
    		txtarea.focus();
    	}
    	else if (txtarea.createTextRange && txtarea.caretPos)
    	{
    		var caretPos = txtarea.caretPos;
    		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
    		txtarea.focus();
    	}
    	else
    	{
    		txtarea.value+= text;
    		txtarea.focus();
    	}
    }
    </script>
    Le HTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <form name="commentaire" method="post">
    <div class="form_conteneur">
    <div class="form_label">Pseudo</div>
    <div class="form_champ"><input type="text" name="pseudo" class="form_balise" /></div>
    <div class="form_label">Message</div>
    <div class="form_champ"><textarea name="message" class="form_balise" style="height : 200px;"></textarea></div>
    </div>
    Et la manière dont sont appelées les émoticones :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <a onclick="javascript:emoticon(':lol:')" style="border-bottom-style: none;"><img src="/images/emotic/smile.gif" border="0"></a>
    <a onclick="javascript:emoticon(':paslol:')" style="border-bottom-style: none;"><img src="/images/emotic/cry.gif" border="0"></a>
    <a onclick="javascript:emoticon(':wink:')" style="border-bottom-style: none;"><img src="/images/emotic/wink.gif" border="0"></a>
     
    etc...
    J'imagine que le soucis vient d'un conflit de noms de champs de formulaires, mais mes connaissances en JS étant limitées, je ne sais pas comment adapter le script.

    Quelqu'un peut m'aider ?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Bonjour,
    passes l'objet FORM, ou son ID en paramètre à la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function emoticon( text, id_form){
      // get l'objet form
      var oForm = document.getElementById( id_form);
      // get la textarea de destination
      var oText = oForm.getElementsByTagName('TEXTAREA')[0];
    // la suite du code
    Il reste une inconnue c'est l'appel à la fonction, comment ce fait-elle, avec des buttons particuliers pour chaque FORM?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Non, ce sont les mêmes boutons pour tous les FORM, ils sont affichés via un script PHP. Je vais peut-être galérer avec ça aussi...

    Je vais essayer de me dépatouiller avec ce que tu m'as donné, c'est déjà un début.

    Merci beaucoup pour ta réponse en tout cas

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    dans ce cas il te faut connaître la TEXTAREA en cours, en gérant une variable oTextareaEnCours que tu peux affecter sur le onfocus des TEXTAREA par exemple.

    Dans ce cas tu pourrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var oTextareaEnCours = null;
    function emoticon( text, id_form){  // le paramètre id_form devient superflus
    /*
      // get l'objet form
      var oForm = document.getElementById( id_form);
      // get la textarea de destination
      var oText = oForm.getElementsByTagName('TEXTAREA')[0];
    */
      var oText = oTextareaEnCours;
      if( oText){
        // la suite du code
      }
    }

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Adopte une syntaxe plus rigoureuse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var txtarea = document.commentaire.message;
    est une syntaxe laxiste


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var txtarea = document.forms['commentaire'].elements['message'];
    permet de cibler le formulaire
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. Comment utiliser la meme table pour plusieurs formulaires
    Par pacodelareunion dans le forum Access
    Réponses: 5
    Dernier message: 26/10/2005, 15h17
  2. Réponses: 4
    Dernier message: 03/05/2005, 17h02
  3. Focus sur les boutons avec plusieurs formulaire
    Par davids21 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2005, 15h48
  4. [optimisation] Plusieurs formulaires vs 1 seul ?
    Par Mos dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/11/2004, 14h10
  5. [C#] Utiliser plusieurs formulaires serveur
    Par Anomaly dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/10/2003, 19h38

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