自动调整文本输入框html

时间:2013-10-17 10:52:59

标签: javascript jquery html css

我创建了一个输入(类型文本)框,并使其自动调整大小非常简单。但是,有一些我似乎无法解决的问题:

  1. 当我开始输入框时缩小了一点
  2. 当我按退格键(或方向箭头)时,该框首先展开,然后在我继续输入时收缩。
  3. 这是我的代码:

    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();
    });
    input {
        	margin-left:3em;
        	min-width:100px;
        	max-width:600px;
    }
    <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>

3 个答案:

答案 0 :(得分:2)

你可以试试这个。

我们将内容置于隐藏的span&amp;然后根据span scrollWidth调整宽度。

function Expander() {

    this.start = function () {

        $('#inputbox').on('keydown',function(e) {

            $("#hidden_span").html("");
            $("#hidden_span").append("<p>"+$(this).val()+"</p>");

            var hidden_span_scroll_width=$("#hidden_span")[0].scrollWidth;

            if(hidden_span_scroll_width> 100||hidden_span_scroll_width< 600){
                $(this).css("width",hidden_span_scroll_width);
            }

        });

    }

}


$(function() {
    window.app = new Expander();
    window.app.start();
});
input {
    margin-left:3em;
    min-width:100px;
    max-width:600px;
}

#hidden_span{
    position:absolute;
    top:0px;
    left:0px;
    visibility:hidden;
    width:10px;
    white-space:nowrap;
    overflow:hidden;
}
<head>
<meta charset="UTF-8">
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
</head>

<body>
<div id="wrap">
    <input type="text" id="inputbox" name="input" placeholder="I want this to resize smoothly." />
</div>
<div id="counter"></div>
<span id="hidden_span"></span>
</body>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<title>Test page</title>
</head>

<body>
<style>
input {
    margin-left:3em;
    min-width:100px;
    max-width:600px;
}
        #hidden_span{
            position:absolute;
            top:0px;
            left:0px;
            visibility:hidden;
            width:10px;
            white-space:nowrap;
            overflow:hidden;

        }
</style>
<script>

function Expander() {

    this.start = function () {

        $('#inputbox').on('keydown',function(e) {


            $("#hidden_span").html("");
            $("#hidden_span").append("<p>"+$(this).val()+"</p>");


            var hidden_span_scroll_width=$("#hidden_span")[0].scrollWidth;

     if(hidden_span_scroll_width> 100||hidden_span_scroll_width< 600){
                $(this).css("width",hidden_span_scroll_width);
                     }


        });

    }

}


$(function() {
    window.app = new Expander();
    window.app.start();
});

</script>
<div id="wrap">
    <input type="text" id="inputbox" name="input" placeholder="yes" />
</div>
<div id="counter"></div>
<span id="hidden_span"></span>
</body>
</html>

答案 1 :(得分:0)

首先,您可以使用jQuery方法来避免crossbrowser问题。 scrollWidth返回元素内容的宽度(以像素为单位)或元素本身的宽度(以较大者为准)。因此,仅当内容宽度大于元素宽度时才放大newWidth。

$("#inputbox").keydown(function(e) {

  var a = $(this).width(), newWidth;


  if(this.scrollWidth - a > 0){
    newWidth = a + 10;
  }else if(e.keyCode==8){
    newWidth = a - 10;
  }
  $(this).css("width", newWidth);

});

如果您不希望在按退格键时输入较小 - 如果部分代码则删除其他。

答案 2 :(得分:-1)

<input type="text" id="inputbox" name="input" placeholder="yes" width="100px"/>

删除width="100px",如下所示:

<input type="text" id="inputbox" name="input" placeholder="yes"/>

开始输入时,它不会再调整大小。

实例:

http://jsfiddle.net/2EMfd/

虽然,exanding功能似乎在浏览器中不起作用?

*编辑,在inputbox做了一个简单的扩展功能,这就是你在哪里尝试? http://jsfiddle.net/2EMfd/1/