jQuery - изменение размера ввода формы в зависимости от ширины значения? - PullRequest
13 голосов
/ 17 февраля 2012

Можно ли получить ширину значения ввода и динамически изменить его размер, чтобы оно подходило?

Вот пример:

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

Ответы [ 10 ]

11 голосов
/ 14 июня 2013

У меня есть плагин jQuery на GitHub: https://github.com/MartinF/jQuery.Autosize.Input

Он отражает значение входных данных, поэтому он может вычислить фактическую длину вместо угадывания или других упомянутых подходов.

Вы можете увидеть живой пример здесь: 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 для установки минимальной / максимальной ширины и используете переход по ширине, если хотите получить хороший эффект.

Вы можете указать пробел / расстояние до конца в качестве значения в формате json для атрибута data-autosize-input элемента input.

Конечно, вы также можете просто инициализировать его с помощью jQuery

$("selector").autosizeInput();
10 голосов
/ 17 февраля 2012

Вот код 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/

6 голосов
/ 25 марта 2016

Текущие ответы были сложными.Вот быстрый

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

Добавление вышеизложенного к событиям нажатия клавиш вверх / вверх по нажатию тривиально.Испытано в хроме

1 голос
/ 08 сентября 2015

Все эти решения, основанные на количестве символов, довольно слабые, потому что каждый символ может иметь разную ширину, если он не является монотипным шрифтом. Я решаю эту проблему, создавая 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);
1 голос
/ 22 августа 2014

Как упомянуто @ManseUK. Эта линия работала для меня. JQuery версия 1.8

$ ( '# ResizeMe') CSS. ({Ширина: newwidth});

1 голос
/ 17 февраля 2012

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 });
    });
} ());

Theres, вероятно, гораздо лучший способделая это.

1 голос
/ 17 февраля 2012
$(function(){
    $("input").keyup(function(){
        $(this).stop().animate({
        width: $(this).val().length*7
    },100)                
    })
})​
1 голос
/ 17 февраля 2012

Что-то простое:

$('#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/

0 голосов
/ 17 марта 2013

этот пример был протестирован на 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);
0 голосов
/ 17 февраля 2012

Вы можете проверить это демо на js fiddle ... http://jsfiddle.net/ninadajnikar/bzBdX/9/.

Вы обновляете значения ширины, как вам нравится

...