jQuery - 根据值的宽度调整表单输入的大小?

发布于 2025-01-07 07:43:10 字数 133 浏览 0 评论 0原文

是否可以获取输入的值宽度并动态调整输入的大小以使该值适合?

这是一个示例:

http://jsfiddle.net/bzBdX/2/

Is it possible to get input's value width and resize the input dynamically so the value will fit?

Here's an example:

http://jsfiddle.net/bzBdX/2/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

扛起拖把扫天下 2025-01-14 07:43:10

这是 jQuery 代码:

$('input').each(function(){
var value = $(this).val();
var size  = value.length;
// playing with the size attribute
//$(this).attr('size',size);

// playing css width
size = size*2; // average width of a char
$(this).css('width',size*3);

})​;

http://jsfiddle.net/bzBdX/7/

Here is the jQuery code :

$('input').each(function(){
var value = $(this).val();
var size  = value.length;
// playing with the size attribute
//$(this).attr('size',size);

// playing css width
size = size*2; // average width of a char
$(this).css('width',size*3);

})​;

http://jsfiddle.net/bzBdX/7/

亽野灬性zι浪 2025-01-14 07:43:10

我在 GitHub 上有一个 jQuery 插件: https://github.com/MartinF/jQuery.Autosize。输入

它反映输入的值,因此它可以计算实际长度,而不是猜测或提到的其他方法。

您可以在这里看到一个实例: http://jsfiddle.net/jw9oqz0e/

示例:

<input type="text" value="" placeholder="Autosize" data-autosize-input='{ "space": 40 }' />

input[type="data-autosize-input"] {
  width: 90px;
  min-width: 90px;
  max-width: 300px;
  transition: width 0.25s;    
}

您只需使用如果你想要好的效果,可以使用 css 设置最小/最大宽度并在宽度上使用过渡。

您可以将到末尾的空间/距离指定为输入元素上 data-autosize-input 属性的 json 表示法值。

当然你也可以使用 jQuery 来初始化它

$("selector").autosizeInput();

I have a jQuery plugin on GitHub: https://github.com/MartinF/jQuery.Autosize.Input

It mirrors the value of the input so it can calculate the actual length instead of guessing or other approaches mentioned.

You can see an live example here: http://jsfiddle.net/jw9oqz0e/

Example:

<input type="text" value="" placeholder="Autosize" data-autosize-input='{ "space": 40 }' />

input[type="data-autosize-input"] {
  width: 90px;
  min-width: 90px;
  max-width: 300px;
  transition: width 0.25s;    
}

You just use css to set min/max-width and use a transition on the width if you want a nice effect.

You can specify the space / distance to the end as the value in json notation for the data-autosize-input attribute on the input element.

Of course you can also just initialize it using jQuery

$("selector").autosizeInput();
月下客 2025-01-14 07:43:10

目前的答案太复杂了。这是一个快速的

$('#myinput').width($('#myinput').prop('scrollWidth'))

添加上述内容到输入 keydown/up/press 事件是微不足道的。
在镀铬中测试

Current answers were waay to complicated. Heres a quick one

$('#myinput').width($('#myinput').prop('scrollWidth'))

Adding the above to input keydown/up/press events is trivial.
Tested in chrome

[旋木] 2025-01-14 07:43:10

简单的事情:

$('#resizeme').keydown(function(){  // listen for keypresses
 var contents = $(this).val();      // get value
 var charlength = contents.length;  // get number of chars
 newwidth =  charlength*9;          // rough guesstimate of width of char
 $(this).css({width:newwidth});     // apply new width
});​

您可以根据个人喜好/文本大小更改乘数

示例:http://jsfiddle.net/bzBdX /6/

Something simple :

$('#resizeme').keydown(function(){  // listen for keypresses
 var contents = $(this).val();      // get value
 var charlength = contents.length;  // get number of chars
 newwidth =  charlength*9;          // rough guesstimate of width of char
 $(this).css({width:newwidth});     // apply new width
});​

You could change the multiplier on personal preference / text-size

Example : http://jsfiddle.net/bzBdX/6/

晒暮凉 2025-01-14 07:43:10
$(function(){
    $("input").keyup(function(){
        $(this).stop().animate({
        width: $(this).val().length*7
    },100)                
    })
})​
$(function(){
    $("input").keyup(function(){
        $(this).stop().animate({
        width: $(this).val().length*7
    },100)                
    })
})​
偏闹i 2025-01-14 07:43:10

http://jsfiddle.net/bzBdX/11/

所以我做了一个例子,它尝试计算宽度为
在跨度中插入字母并计算宽度

(function() {
    var mDiv = $("<span />").text("M").appendTo("body"),
        mSize = mDiv.width();
    mDiv.detach();

    var letterSize = function(s) {
        var sDiv = $("<span />").text("M" + s + "M").appendTo("body"),
            sSize = sDiv.width();

        sDiv.detach();

        return (sSize - (mSize * 2)) * 0.89;
    };

    $("input[data-resise-me]").each(function() {
        var minSize = $(this).width();

        var resizeInput = function() {
            var calcSize = $.map($(this).val(), letterSize);
            var inputSize = 0;
            $.each(calcSize, function(i, v) { inputSize += v; });

            $(this).width( inputSize < minSize ? minSize : inputSize );
        };

        $(this).on({ keydown: resizeInput, keyup: resizeInput });
    });
} ());

可能有更好的方法来做到这一点。

http://jsfiddle.net/bzBdX/11/

So i made an example where it tries to calculate the width by
inserting letters in a span and calculating there width

(function() {
    var mDiv = $("<span />").text("M").appendTo("body"),
        mSize = mDiv.width();
    mDiv.detach();

    var letterSize = function(s) {
        var sDiv = $("<span />").text("M" + s + "M").appendTo("body"),
            sSize = sDiv.width();

        sDiv.detach();

        return (sSize - (mSize * 2)) * 0.89;
    };

    $("input[data-resise-me]").each(function() {
        var minSize = $(this).width();

        var resizeInput = function() {
            var calcSize = $.map($(this).val(), letterSize);
            var inputSize = 0;
            $.each(calcSize, function(i, v) { inputSize += v; });

            $(this).width( inputSize < minSize ? minSize : inputSize );
        };

        $(this).on({ keydown: resizeInput, keyup: resizeInput });
    });
} ());

Theres probably a much better way of doing this.

捶死心动 2025-01-14 07:43:10

正如@ManseUK 所提到的。这条线对我有用。
jQuery 版本 1.8

$('#resizeme').css({width:newwidth});

As mentioned by @ManseUK. This line worked for me.
JQuery version 1.8

$('#resizeme').css({width:newwidth});

好听的两个字的网名 2025-01-14 07:43:10

所有这些基于字符数的解决方案都非常弱,因为如果不是单型字体,每个字符可能具有不同的宽度。我正在解决这个问题,方法是创建一个包含具有相同字体属性的文本输入值的 div,并获取其宽度作为所需的宽度。

像这样的事情:

function resizeInput() {
    $('body').append('<div class="new_width">'+$(this).val()+'</div>');
    $(this).css('width', $('.new_width').width());
    $('.new_width').remove()
}
$('input')
    // event handler
    .keyup(resizeInput)
    // resize on page load
   .each(resizeInput);

All those solutions based on number of characters are quite weak, because each character could be of a different width if it is not a monotype font. I'm solving this problem with creating a div containing value of text input with the same font properties and getting its width as a required one.

Something like this:

function resizeInput() {
    $('body').append('<div class="new_width">'+$(this).val()+'</div>');
    $(this).css('width', $('.new_width').width());
    $('.new_width').remove()
}
$('input')
    // event handler
    .keyup(resizeInput)
    // resize on page load
   .each(resizeInput);
谁人与我共长歌 2025-01-14 07:43:10

此示例已在 Chrome 25 和 Firefox 19 上进行了测试。 (http://jsfiddle.net/9ezyz/)

function input_update_size()
{
    var value = $(this).val();
    var size  = 12;

    // Looking for font-size into the input
    if (this.currentStyle)
        size = this.currentStyle['font-size'];
    else if (window.getComputedStyle)
        size =  document.defaultView.getComputedStyle(this,null).getPropertyValue('font-size');
    $(this).stop().animate({width:(parseInt(size)/2+1)*value.length},500);
    //$(this).width((parseInt(size)/2+1)*value.length);
}

$('input')
    .each(input_update_size)
    .keyup(input_update_size);

this example as been tested on Chrome 25 and Firefox 19. (http://jsfiddle.net/9ezyz/)

function input_update_size()
{
    var value = $(this).val();
    var size  = 12;

    // Looking for font-size into the input
    if (this.currentStyle)
        size = this.currentStyle['font-size'];
    else if (window.getComputedStyle)
        size =  document.defaultView.getComputedStyle(this,null).getPropertyValue('font-size');
    $(this).stop().animate({width:(parseInt(size)/2+1)*value.length},500);
    //$(this).width((parseInt(size)/2+1)*value.length);
}

$('input')
    .each(input_update_size)
    .keyup(input_update_size);
眼眸里的那抹悲凉 2025-01-14 07:43:10

您可以在 js fiddle 上查看此演示... http://jsfiddle.net/ninadajnikar/bzBdX/9 /

您可以根据需要更新宽度值

You can check this demo on js fiddle ... http://jsfiddle.net/ninadajnikar/bzBdX/9/ .

You update the width values as you like it

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文