Si quelqu'un peut répondre à ma question, je suis preneur ^^
Bonjour,
Je voudrais faire un textarea qui s'adapte au contenu au chargement de la page, mon script fonctionne avec un textarea classique (en HTML pur). Je voudrais intégrer mon script à l'administration de mon site.
Par exemple pour administrer un article ma page contient un formulaire avec différents champs dont un textarea.
Le problème c'est que le formulaire est généré en PHP et les différentes valeurs des champs proviennent de la base de données.
Du coup mon script n'arrive pas à calculer la largeur de mon textarea
Voici mon code actuel :
console.log me donne le résultat suivant :
Comment puis-je faire pour qu'il calcule correctement la taille de mes textarea ?
14 réponses
Hello,
Ton script fonctionne, tu as juste fait une erreur dans ton console.log (tu as oublié le t de height)
Oui j'ai fait une faute de frappe mais cela ne règle pas le problème il me donne 0 au lieu de undefined (J'ai corrigé mon post)
En HTML pur il marche mais quand le formulaire est générer en PHP avec le contenu provenant de la base de données il ne marche plus
Peux-tu me montrer ton code d'un textarea avec ton php?
C'est une classe mais je peux te montrer le code
La fonction textarea de la classe CustomForm
La vue
Hum je ne vois pas d'érreur de code la comme ça, peux tu me montrer le HTML généré ?
À mon avis tu dois avoir des espaces en trop ou manquant lors de la génration de l'input, tu devrais plutôt utiliser la fonction implode pour concaténer les attributs du textarea, exemple :
Mon textarea en lui-même marche très bien, c'est que le code PHP doit venir après le code HTML et CSS et du coup le JavaScript est perdu, enfin je pense
De plus le texte pour le remplir provient de la base de données donc je suppose qu'il y a un petit temps pour qu'il récupère les infos et remplit le textarea
Le code HTML généré pour un article est le suivant :
Hello,
Non car tu ne fait pas d'ajax, le php est executé bien avant tout ça (beh oui, c'est lui qui génère ton code HTML).
Essaye de mettre tout ton code dans un setTimeout
Essaye aussi de faire un console.log de $('[data-autoresize]').length
Si quelqu'un peut me dire d'où peut venir le problème ?
Cela ne marche pas plus
Pour ce qui est du console.log :
Résultat :
Avec jQuery, le mieux c'est de commencer et finir avec
Ce que l'on ne voit pas dans le code que tu propose. Comme ça, on s'assure que le script javascript passe après tout le reste.
J'ai testé dernièrement un script pour détecter la largeur d'un élément avec width(). J'ai pas pu parce qu'il n'était pas afficher directement... il fallait attendre que le modal bootstrap et que s'affiche l'élément pour pouvoir le calculer (logique oui :p).
la résolution du problème à été de mettre un setTimeout( function(/ ton code /), 1000);
N'hésite pas à nous faire un retour sur ton expérience.
Je croyais que jQuery(function($) {}); fesait la même chose en isolant jQuery pour éviter les erreurs de variables.
Et tout mes scripts sont en bas de page (avant la fermeture du body)
Après test $("document").ready(function() {}); ne donne rien de plus mais la fonction setTimeout(function() {}, 1000); agrandit bien le textarea à la bonne taille.
Le problème c'est qu'il s'agrandit au bout de 1 s (d'où le 1000ms)
Mon script donne ceci :
En mettant un délai de 50ms cela marche en local après il faut faire des tests en ligne sur un serveur distant.
Du coup pourquoi il faut un délai supplémentaire ?
Après un test sur un serveur mutualisé mon textarea s'adapte bien au contenu au bout de 50 ms, après la base de données est toute petite mais bon s'il y a une base de données plus conséquentes je pense qu'il faudra augmenter le délai de quelque ms