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

jQuery Discussion :

Impossible de récupérer le contenu d'un textarea


Sujet :

jQuery

  1. #1
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut Impossible de récupérer le contenu d'un textarea
    Bonjour,

    Je reviens avec un nouveau problème. J'ai fait des recherches, essayé plusieurs méthode comme "find" par exemple, mais impossible de récupérer le contenu du textarea. Aucune erreur console ni réseau. Le système fonctionne niquel sur les input.
    Le alert reste vide et idem en base de données, seul le champs qui correspond au textarea reste vide.

    J'utilise ckeditor, peut être que ça vient de là.

    Le code que j'utilise en jquery
    Code js : 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
    $('#ajtInf').submit(function(event) {
        event.preventDefault();
        var ref = $('#ref').val(),
         type = $('#type').val(),
         texte = $(this).find('#editor1');
        // Alert pour test du textarea
        alert(texte);
     $.ajax({
      url : 'ajtInf.php',
      type : 'POST',
      data : 'ref=' + ref + '&type=' + type + '&editor=' + texte,
      dataType : 'html',
     });
     $.ajax({
      url : 'actInf.php',
      type : 'POST',
      data : 'ref=' + ref,
      dataType : 'html',
      success : function(code_html, statut){
       $('#'+ref).html(code_html);
      },
     });
     $('#infos').css('display','none');
    });

    Le textarea modifié par ckeditor à l'id "editor1". En dehors de ça c'est un formulaire tout ce qu'il y a de plus banal et dont la récupération ne pose absolument aucun problème sur les autres champs.

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    En utilisant .find() tu obtiens l’élément textarea qui est un objet DOM (encapsulé dans un objet jQuery). Pour avoir sa valeur il faut ensuite appeler .val().
    The .val() method is primarily used to get the values of form elements such as input, select and textarea. When called on an empty collection, it returns undefined.
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    texte = $(this).find('#editor1').val();

    Note : à la place de alert, utilise console.log.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Déjà passé par cette étape, mais toujours rien.

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    Alors c'est que l'erreur est ailleurs,
    _ est-ce ton id est bien unique ?
    _ est-ce que utilise bien le mode strict ?
    _ pourquoi tes 2 appels ajax on tous deux une virgule en trop ? ( lignes 18 et 30)
    _ pourquoi ton premier appel ajax n'utilise pas de callback ? (ligne 13)
    _ pourquoi tu fais 2 appels ajax en même temps dans ton submit ? (et quel est l’intérêt ? )
    _ pourquoi tu utilises un formulaire alors qu’a priori tu utilise de l'ajax pour envoyer tes données ? ( => donc le formulaire ne sert à rien ? )

    Le code que tu nous montre est beaucoup trop succin pour qu'on puisse se rendre compte de quoi que ce soit.

    ton code, juste indenté proprement, et avec ses erreurs :
    Code JavaScript : 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
    $('#ajtInf')
    .submit(function(event)
    {
      event.preventDefault();
      var
        ref   = $('#ref').val(),
        type  = $('#type').val(),
        texte = $(this).find('#editor1')
      ;
      // Alert pour test du textarea
      console.log(texte);
     
      $.ajax(
      {
        url      : 'ajtInf.php',
        type     : 'POST',
        data     : 'ref=' + ref + '&type=' + type + '&editor=' + texte,
        dataType : 'html',
      });
     
      $.ajax(
      {
        url      : 'actInf.php',
        type     : 'POST',
        data     : 'ref=' + ref,
        dataType : 'html',
        success  : function(code_html, statut)
        {
          $('#'+ref).html(code_html);
        },
      });
      $('#infos').css('display','none');
    });

  5. #5
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Bonjour,


    • Oui l'id est unique, et instauré par ckeditor (comme précisé dès le premier message), pas par moi.
    • Sachant que le mode strict, à ce que j'en ai compris, n'est pas supporté par tout les navigateurs, non, je ne l'utilise pas.
    • Pour les virgules, oublis de ma part suite à des tests, mais ça n'empêche pas le fonctionnement puisque, comme je l'ai précisé, seul le textarea est touché.
    • Pas besoin d'affiché quoi que ce soit puisque, encore une fois, comme précisé, ça envois des informations à un fichier php pour enregistrer des infos en BDD.
    • Pourquoi deux appels ? Tout simplement parce qu'ils n'appellent pas le même fichier distant vu que leur utilité n'est pas la même. Le deuxième sert à actualiser une information précise en fonction de ce que a été rajouter précédemment.
    • Si j'utilise un formulaire c'est que j'en ai besoin, le fait que ça passe en ajax au lieu de façon "standard" est simplement personnel et lié au fonctionnement même du site.


    Le code que je montre est loin d'être succin. Il montre tout et je vais pas rajouter du code inutile, et qui alourdirai le bordel, pour te faire plaisirs. Puisque le reste n'est qu'un formulaire html et que j'ai donné les infos, à savoir l'id du "rebelle".
    Je sais que ça ne vient pas de php puisque j'ai fait le test avec des infos en dur (sans variables POST) et il fonctionne très bien.

    sauf si tu aimes jouer aux devinettes : on te propose une correction possible, puis tu réponds
    si c'est oui, on à gagné ( mais quoi ?)
    si c'est non, on recommence une nouvelle question et ainsi de suite ?
    Là par contre il va falloir que tu me dises de quoi tu parle. J'ai apporté tout les détails du problème dès le premier message.
    Et à la solution proposé, je dis que je l'ai déjà essayé et que ça ne fonctionne pas.

    J'ai peut être un problème de code, mais toi tu ne sais tout simplement pas lire.

    Pour ce qui est de l'indentation, je préfère très largement la mienne, hors ré-indentation suite au copier-coller sur le forum. La tienne je la trouve extrêmement mauvaise, illisible et illogique.

    Désolé, mais quand je reçois une réponse agressive je répond sur le même ton. Surtout quand on ne peut se le permettre.
    Tu ne donne pas de solution, juste des critiques à peine masqués. En prétextant que je ne donne pas toutes les infos, ce qui est faux puisque j'ai exposé le problème avec le moindre détails.

    Edit : C'est confirmé, c'est bien ckeditor qui bloque. Je l'ai désactivé et le console.log me retourne bien le contenu du textarea sans rien changer d'autre.
    Donc, psychadelic, pour rester sur le même ton que toi, redescend de ton pied d'estale et patiente que ta tête, ou tes chevilles ou les deux qui sait, dégonfle(nt).

    Bon en dehors de ce personnage très pédant qu'est psychadelic, est ce que quelqu'un connait un bon éditeur, comme celui de Développez par exemple, pour faire ce que j'ai a faire sans qu'il ne me bloque en JS ? Si j'ai pas le choix je ferai du html/php à 100% pour cette partie, mais pour la logique d'utilisation du site, j'aimerai bien pouvoir le faire en ajax.

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    Citation Envoyé par Maxime.mt Voir le message
    [*]Sachant que le mode strict, à ce que j'en ai compris, n'est pas supporté par tout les navigateurs, non, je ne l'utilise pas.
    le mode strict sert surtout à s'assurer que son code est cohérent, c'est un outil utile pour deboguer son code, tu peux le retirer lors du passage en prod. Cela t'aurais possiblement permis de remonter un message d'erreur dans le cas présent.

    Et au moins mon message t'a réveillé pour aller chercher la raison ailleurs, comme je te l'ai écrit.

    Sinon, désolé de m'être énervé (je réagis souvent comme ça quand on tourne en rond) , et j'utilise MarkDown, parce que tous les éditeurs de code soit disant wysiwyg deviennent vite obsolète sans jamais réussir à être vraiment fiable.

  7. #7
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    L’id editor1 correspond à quel type de balise ? Un div ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    le mode strict sert surtout à s'assurer que son code est cohérent, c'est un outil utile pour deboguer son code, tu peux le retirer lors du passage en prod. Cela t'aurais possiblement permis de remonter un message d'erreur dans le cas présent.

    Et au moins mon message t'a réveillé pour aller chercher la raison ailleurs, comme je te l'ai écrit.

    Sinon, désolé de m'être énervé (je réagis souvent comme ça quand on tourne en rond) , et j'utilise Visual studio Code, parce que tous les éditeurs de code soit disant wysiwyg deviennent vite obsolète sans jamais réussir à être vraiment fiable.
    Pas de soucis, au moins on a mis les choses à plat

    Je pensais déjà à ckeditor dès le début, Je l'ai même dit, mais avec la fatigue je n'ai pas pensé à le désactiver pour tester. J'y ai pensé ce matin en me réveillant

    Je vais abandonner ajax pour cette partie je pense.

    Citation Envoyé par badaze
    L’id editor1 correspond à quel type de balise ? Un div ?
    A un textarea.
    D'où le titre



    Edit : Voila où atterrit le textarea après passage en JS par ckeditor. Me reste plus trouver un moyen de récupérer son contenu … sans bug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" spellcheck="false" contenteditable="true"><p>test<br></p></body>

  9. #9
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Je ne suis pas un spécialiste mais un textarea ne permettra jamais de faire un editeur wysiwyg.
    Il y a donc autre chose. Ma question n'était pas aussi "débile" qu'il n'y paraissait puisque tu as vu toi aussi qu'il y a quelque chose "en dessous".

    Code html : 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
     
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>A Simple Page with CKEditor</title>
            <!-- Make sure the path to CKEditor is correct. -->
            <script src="ckeditor/ckeditor.js"></script>
     
      <script>
      function toto()
      {
       var a     = document.getElementById('cke_1_contents'); 
       var frame = a.firstChild;
       
       alert(frame.contentWindow.document.body.innerHTML);
      }
      </script>
        </head>
        <body>
            <form>
                <textarea name="editor1" id="editor1" rows="10" cols="80">
                    This is my textarea to be replaced with CKEditor.
                </textarea>
                <script>
                    // Replace the <textarea id="editor1"> with a CKEditor
                    // instance, using default configuration.
                    CKEDITOR.replace( 'editor1' );
                </script>
            </form>
     
      <input type="button" value="Clic" onclick="toto()"/>
        </body>
    </html>

    Nom : Capture20181209_002.JPG
Affichages : 747
Taille : 29,3 Ko

  10. #10
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Je savais que c'était une surchouche.

    C'est pour ça que j'essais de récupérer le contenu désiré. Merci de ton aide, ça me donne une piste.

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Bonjour,
    effectivement CKEditor travaille avec une surcouche, le moyen d'accéder à ce qui est saisi est de passer par les méthodes mises à disposition et notamment getData(), on y accède avec CKEDITOR.instances.id_editeur.getData().

    Exemple pour voir :
    Code html : 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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="utf-8">
    <title>CKEditor getData()</title>
    <script src="https://cdn.ckeditor.com/4.11.1/standard-all/ckeditor.js"></script>
    <style>
    [id^="text"]::before {
      content: attr(id) " :";
      display: block;
      margin-top: 1em;
      font-weight: bold;
      color: #069;
    }
    </style>
    </head>
    <body>
      <h1>CKEditor <code>getData()</code></h1>
      <textarea id="editor" name="editor">Texte original</textarea>    
      <p><button id="getData()">Get Editor</button></p>
      <div id="text-getData()"></div>
      <div id="text-original"></div>
    <script>
    CKEDITOR.replace('editor');
    document.getElementById("getData()").onclick = function() {
      document.getElementById("text-getData()").textContent = CKEDITOR.instances.editor.getData();
      document.getElementById("text-original").textContent = document.getElementById("editor").value;
    }
    </script>  
    </body>
    </html>
    Tu peux également mettre à jour ta <textarea>, qui ne l'est pas naturellement, pour ne pas avoir à utiliser getData(), il te faut dans se cas mettre à jour celle-ci « automatiquement ».
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var oEdit = CKEDITOR.replace('editor');
    oEdit.on("change", function(e) {
      document.getElementById("editor").value = this.getData();
    });

  12. #12
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Désolé j'étais pris.
    Je tente demain, j'ai pas la tête au code là, et je vous tiens au courant.

  13. #13
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Mise à jour après 5 ans ... :-)
    Bonjour, cette conversation date mais elle m'a été utile pour trouver mon bug actuel. Merci

    Mise à jour du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    EDITOR.replace('ra2_remarque_poids');
     
    $("#formulaire").submit(function( event ) {
      event.preventDefault();
      var str = $("#formulaire").serialize();
      var editorData = CKEDITOR.instances.ra2_remarque_poids.getData(); // Récupère les données de l'éditeur CKEditor
      str += "&ra2_remarque_poids=" + encodeURIComponent(editorData); // Ajoute les données de l'éditeur au formulaire encodées correctement
     
      $.ajax({
        type: "POST",
        url: "URL DE DESTINATION",
        data: str,
    .......
    Bonne prog !

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