auto-redimensionnement de la zone de saisie de texte html
J'ai créé une entrée (type de texte) et fait de l'auto-redimensionner tout simplement. Cependant, il ya quelques problèmes que je n'arrive pas à résoudre:
- lorsque je commence à taper la boîte réduit un tout petit peu
- lorsque j'appuie sur la touche retour arrière (ou flèches directionnelles), la zone s'étend d'abord, puis se rétrécit quand je continuer à taper.
Voici mon code:
JS:
function Expander() {
this.start = function () {
$("#inputbox").keydown(function(e) {
this.style.width = 0;
var newWidth = this.scrollWidth + 10;
if( this.scrollWidth >= this.clientWidth )
newWidth += 10;
this.style.width = newWidth + 'px';
});
}
}
$(function() {
window.app = new Expander();
window.app.start();
});
CSS:
input {
margin-left:3em;
min-width:100px;
max-width:600px;
}
HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<meta charset="UTF-8">
<body>
<div id="wrap">
<input type="text" id="inputbox" name="input" placeholder="I want this to resize smoothly." width="100px"/>
</div>
<div id="counter"></div>
</body>
- juste une observation, pensez lorsque vous collez du texte ou en appuyant sur une touche vers le bas et de la tenir. Peut-être que vous devriez regarder le plugin sur cette réponse: stackoverflow.com/questions/931207/... à la place.
- merci, je n'ai pas fini avec mon code, il suffit de se demander pourquoi il a eu des problèmes. je ne vais jamais apprendre la langue si je viens de prendre le code des autres 🙂
- vous n'avez pas besoin de prendre juste le code, vous pouvez analyser ce que leur code est fait de sorte que vous pouvez écrire votre propre plugin, je trouve cela très utile lors de l'apprentissage.
- Concernant votre première question, je pense qu'il se rétrécit en raison de la largeur par défaut de l'entrée est 117px (au moins dans chrome). Si vous définissez la largeur de la CSS à être le même que le min-width elle doit être fine.
- Concernant votre deuxième question, utiliser le "oninput de l'événement" au lieu de "onkeydown".
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer cette.
Nous mettre le contenu caché dans un
span
& puis ajuster la largeur selonspan
scrollWidth.JS:
CSS:
HTML:
Au premier abord, vous pouvez utiliser les méthodes jQuery pour éviter crossbrowser problème. Et scrollWidth renvoie la largeur en pixels du contenu d'un élément ou de la largeur de l'élément lui-même, selon le plus élevé. Donc agrandir newWidth uniquement lorsque le contenu de la largeur fortement plus grand que la largeur de l'élément.
Si vous ne voulez pas faire l'entrée de plus petites lorsqu'il est pressé arrière - supprimer le reste, si la partie de code.
Supprimer la
width="100px"
, comme ceci:Et il n'est pas redimensionné plus bas lorsque vous commencez à taper.
Live exemple:
http://jsfiddle.net/2EMfd/
Cependant, le exanding fonction ne semble pas fonctionner dans mon navigateur?
*Édition, n'a qu'une simple fonction de développement sur le
inputbox
est-ce que vous avez tenté? http://jsfiddle.net/2EMfd/1/