Je travaille actuellement sur une application de vente interne pour l'entreprise pour laquelle je travaille et j'ai un formulaire qui permet à l'utilisateur de modifier l'adresse de livraison.
Maintenant, je pense que cela aurait l'air beaucoup plus agréable si la zone de texte que j'utilise pour les détails de l'adresse principale occupait simplement la zone du texte qu'elle contient et se redimensionnait automatiquement si le texte était modifié.
En voici une capture d'écran actuellement.
Des idées?
@Chris
Un bon point, mais il y a des raisons pour lesquelles je veux qu'il soit redimensionné. Je veux que la zone occupée soit la zone des informations qu'elle contient. Comme vous pouvez le voir sur la capture d'écran, si j'ai une zone de texte fixe, cela prend un peu d'espace vertical.
Je peux réduire la police, mais j'ai besoin que l'adresse soit grande et lisible. Maintenant, je peux réduire la taille de la zone de texte, mais j'ai des problèmes avec les personnes qui ont une ligne d'adresse qui prend 3 ou 4 (une prend 5) lignes. Le besoin que l'utilisateur utilise une barre de défilement est un non-non majeur.
Je suppose que je devrais être un peu plus précis. Je suis après un redimensionnement vertical, et la largeur n'a pas autant d'importance. Le seul problème qui se produit avec cela, c'est que le numéro ISO (le grand "1") est poussé sous l'adresse lorsque la largeur de la fenêtre est trop petite (comme vous pouvez le voir sur la capture d'écran).
Il ne s'agit pas d'avoir un gadget; il s'agit d'avoir un champ de texte que l'utilisateur peut modifier qui ne prendra pas d'espace inutile, mais affichera tout le texte qu'il contient.
Mais si quelqu'un trouve une autre façon d'aborder le problème, je suis ouvert à cela aussi.
J'ai un peu modifié le code car il agissait un peu bizarrement. Je l'ai changé pour l'activer au clavier, car il ne prendrait pas en compte le caractère qui venait d'être tapé.
resizeIt = function() {
var str = $('iso_address').value;
var cols = $('iso_address').cols;
var linecount = 0;
$A(str.split("\n")).each(function(l) {
linecount += 1 + Math.floor(l.length / cols); // Take into account long lines
})
$('iso_address').rows = linecount;
};
Réponses:
Facebook le fait lorsque vous écrivez sur les murs des gens, mais ne se redimensionne que verticalement.
Le redimensionnement horizontal me semble être un désordre, en raison du retour à la ligne, des longues lignes, etc., mais le redimensionnement vertical semble être assez sûr et agréable.
Aucun des nouveaux utilisateurs de Facebook que je connais n'a jamais mentionné quoi que ce soit à ce sujet ou n'a jamais été confus. J'utiliserais cela comme preuve anecdotique pour dire «allez-y, mettez-le en œuvre».
Un peu de code JavaScript pour le faire, en utilisant Prototype (car c'est ce que je connais bien):
PS: De toute évidence, ce code JavaScript est très naïf et pas bien testé, et vous ne voulez probablement pas l'utiliser sur des zones de texte contenant des romans, mais vous avez l'idée générale.
la source
<textarea cols='5'>0 12345 12345 0</textarea>
. (J'ai écrit une implémentation presque identique et je n'ai compris cela qu'après un mois d'utilisation.) Cela échoue également pour les lignes vides.Une amélioration de certaines de ces réponses est de laisser CSS faire plus de travail.
L'itinéraire de base semble être:
textarea
et undiv
textarea
contenu du 's synchronisé avec lediv
' sdiv
, nous évitons de définir explicitement latextarea
hauteur du.la source
var text = $("#textArea").val().replace(/\n/g, '<br/>') + ' ';
s'assure que vous n'obtenez pas de comportement saccadé lorsque vous passez d'une nouvelle ligne vide à la fin de la zone de texte à une autre non vide, car la div cachée s'assure de s'enrouler dans le nbsp.Voici une autre technique pour dimensionner automatiquement une zone de texte.
Code: (JavaScript vanille ordinaire)
Démo: (utilise jQuery, des cibles sur la zone de texte dans laquelle je tape en ce moment - si Firebug est installé, collez les deux exemples dans la console et testez sur cette page)
la source
clientHeight
etscrollHeight
est égal, vous ne pouvez donc pas utiliser cette méthode si vous voulez que votre zone de texte se rétrécisse et s'agrandisse.if (text.clientHeight == text.scrollHeight) text.style.height = "20px";
Probablement la solution la plus courte:
De cette façon, vous n'avez pas besoin de div cachés ou de quelque chose comme ça.
Remarque: vous devrez peut-être jouer avec en
this.style.height = (this.scrollHeight) + "px";
fonction de la façon dont vous stylisez la zone de texte (hauteur de ligne, remplissage et ce genre de choses).la source
keyup
pourrait être suffisant, mais je ne suis pas sûr. J'étais si heureux de l'avoir compris, que j'ai arrêté d'essayer autre chose.Voici une version prototype du redimensionnement d'une zone de texte qui ne dépend pas du nombre de colonnes dans la zone de texte. C'est une technique supérieure car elle vous permet de contrôler la zone de texte via CSS ainsi que d'avoir une zone de texte à largeur variable. De plus, cette version affiche le nombre de caractères restants. Bien que cela ne soit pas demandé, c'est une fonctionnalité très utile et est facilement supprimée si vous ne le souhaitez pas.
Créez le widget en appelant
new Widget.Textarea('element_id')
. Les options par défaut peuvent être remplacées en les passant en tant qu'objet, par exemplenew Widget.Textarea('element_id', { max_length: 600, min_height: 50})
. Si vous souhaitez le créer pour toutes les zones de texte de la page, procédez comme suit:la source
Voici une solution avec
JQuery
:abc
est unteaxtarea
.la source
Vérifiez le lien ci-dessous: http://james.padolsey.com/javascript/jquery-plugin-autoresize/
la source
En revisitant simplement cela, je l'ai rendu un peu plus net (bien que quelqu'un qui est plein de bouteille sur Prototype / JavaScript puisse suggérer des améliorations?).
Il suffit d'appeler avec:
la source
J'ai fait quelque chose d'assez simple. J'ai d'abord mis le TextArea dans un DIV. Deuxièmement, j'ai appelé la
ready
fonction de ce script.Facile. C'est la hauteur maximale du div une fois qu'il est rendu, divisée par la hauteur d'un TextArea d'une ligne.
la source
J'avais besoin de cette fonction pour moi-même, mais aucune de celles d'ici ne fonctionnait comme j'en avais besoin.
J'ai donc utilisé le code d'Orion et l'ai changé.
J'ai ajouté une hauteur minimale pour que la destruction ne devienne pas trop petite.
la source
Comme la réponse de @memical.
Cependant j'ai trouvé quelques améliorations. Vous pouvez utiliser la
height()
fonction jQuery . Mais soyez conscient des pixels de remplissage en haut et en bas. Sinon, votre zone de texte se développera trop vite.la source
Ma solution n'utilisant pas jQuery (car parfois ils ne doivent pas être la même chose) est ci-dessous. Bien qu'il n'ait été testé que dans Internet Explorer 7 , la communauté peut donc indiquer toutes les raisons pour lesquelles cela est faux:
Jusqu'à présent, j'aime vraiment son fonctionnement, et je me fiche des autres navigateurs, donc je vais probablement l'appliquer à toutes mes zones de texte:
la source
Voici une extension du widget Prototype que Jeremy a posté le 4 juin:
Cela empêche l'utilisateur de saisir plus de caractères si vous utilisez des limites dans les zones de texte. Il vérifie s'il reste des caractères. Si l'utilisateur copie du texte dans la zone de texte, le texte est coupé au maximum. longueur:
la source
@memical avait une solution géniale pour définir la hauteur de la zone de texte sur pageload avec jQuery, mais pour mon application, je voulais pouvoir augmenter la hauteur de la zone de texte à mesure que l'utilisateur ajoutait plus de contenu. J'ai construit la solution de memical avec ce qui suit:
Ce n'est pas très fluide mais ce n'est pas non plus une application orientée client, donc la fluidité n'a pas vraiment d'importance. (Si cela avait été fait face au client, j'aurais probablement juste utilisé un plugin jQuery de redimensionnement automatique.)
la source
Pour ceux qui codent pour IE et rencontrent ce problème. IE a un petit truc qui le rend 100% CSS.
Vous pouvez même fournir une valeur pour rows = "n" que IE ignorera, mais que d'autres navigateurs utiliseront. Je déteste vraiment le codage qui implémente des hacks IE, mais celui-ci est très utile. Il est possible que cela ne fonctionne qu'en mode Quirks.
la source
Les utilisateurs d'Internet Explorer, Safari, Chrome et Opera doivent se souvenir de définir explicitement la valeur de hauteur de ligne dans CSS. Je fais une feuille de style qui définit les propriétés initiales de toutes les zones de texte comme suit.
la source
Voici une fonction que je viens d'écrire dans jQuery pour le faire - vous pouvez la porter sur Prototype , mais ils ne supportent pas la "vivacité" de jQuery donc les éléments ajoutés par les requêtes Ajax ne répondront pas.
Cette version se développe non seulement, mais elle se contracte également lorsque vous appuyez sur la touche de suppression ou de retour arrière.
Cette version repose sur jQuery 1.4.2.
Prendre plaisir ;)
http://pastebin.com/SUKeBtnx
Usage:
ou (n'importe quel sélecteur jQuery par exemple)
Il a été testé sur Internet Explorer 7 / Internet Explorer 8 , Firefox 3.5 et Chrome. Tout fonctionne bien.
la source
En utilisant ASP.NET, faites simplement ceci:
la source