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:

  1. lorsque je commence à taper la boîte réduit un tout petit peu
  2. 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".
InformationsquelleAutor rockerist | 2013-10-17