dynamically increase input type text textbox width according to the characters entering into it

后端 未结 5 1498
名媛妹妹
名媛妹妹 2020-12-06 21:41

I have a textbox where the user can enter any number of characters, But I want its width to be increased dynamically with respect to the number of chara

相关标签:
5条回答
  • 2020-12-06 22:03
    <input type="text" id="txtbox" size="10"/> 
    
    $('#txtbox').keypress(function() {
            var txtWidth = $(this).attr('size');
            var cs = $(this).val().length-6;
            txtWidth = parseInt(txtWidth);
            if(cs>txtWidth){
               $(this).attr('size',txtWidth+5);    }
        });
    

    You were using width field which is actually meant for type = image. You can get more info here. I have used size attribute which is used to set the size of input tag in pixels. When its 1 it can take 6 characters by default hence -6. Hope it helps.

    0 讨论(0)
  • 2020-12-06 22:10

    On the x-editable documentation you can find the option type so i guess you have to add data-editable-type="textarea"

    0 讨论(0)
  • 2020-12-06 22:13

    Adding a simple inline code in onkeyUp should help

    <input type="text" name="fname" onkeypress="this.style.minWidth = ((this.value.length + 1) * 7) + 'px';">

    0 讨论(0)
  • 2020-12-06 22:14

    A solution similar to @Tejas', but doesn't require the font to be mono-space:

    The trick is to use scrollWidth, which gives us the total string length, even on single-line textboxes without a scrollbar: https://stackoverflow.com/a/9312727/1869660

    NOTE: I couldn't get this to work in IE, where scrollWidth always returned 2 for some reason..

    Some code:

    function expand(textbox) {
        if (!textbox.startW) { textbox.startW = textbox.offsetWidth; }
    
        var style = textbox.style;
    
        //Force complete recalculation of width
        //in case characters are deleted and not added:
        style.width = 0;
    
        var desiredW = textbox.scrollWidth;
        //Optional padding to reduce "jerkyness" when typing:
        desiredW += textbox.offsetHeight;
    
        style.width = Math.max(desiredW, textbox.startW) + 'px';
    }
    
    ...
    
    <input type="text" onkeyup="expand(this);" >
    

    JSFiddle example

    0 讨论(0)
  • 2020-12-06 22:16

    I have tried this code and it works fine.

    <html>
    <head>
      <script type="text/javascript">
         function Expand(obj){
          if (!obj.savesize) obj.savesize=obj.size;
          obj.size=Math.max(obj.savesize,obj.value.length);
         }
      </script>
      </head>
      <body>
         <form>
           <input  type="text" size="5" style="font-family:Courier;" onkeyup="Expand(this);">
         </form>
      </body>
    </html>
    

    Be sure to use mono space fonts in text box, otherwise the size attr. and number of characters won't match

    0 讨论(0)
提交回复
热议问题