Как автоматически изменить размер поля ввода = «текст» с помощью jQuery? Я хочу, чтобы это было как 100px в ширину с самого начала, а затем сделало его автоматическим расширением, поскольку пользователь вводит текст ... это возможно?jQuery - автоматический ввод текста (не textarea!)
ответ
Вот плагин, который будет делать то, что вы после:
Плагин:
(function($){
$.fn.autoGrowInput = function(o) {
o = $.extend({
maxWidth: 1000,
minWidth: 0,
comfortZone: 70
}, o);
this.filter('input:text').each(function(){
var minWidth = o.minWidth || $(this).width(),
val = '',
input = $(this),
testSubject = $('<tester/>').css({
position: 'absolute',
top: -9999,
left: -9999,
width: 'auto',
fontSize: input.css('fontSize'),
fontFamily: input.css('fontFamily'),
fontWeight: input.css('fontWeight'),
letterSpacing: input.css('letterSpacing'),
whiteSpace: 'nowrap'
}),
check = function() {
if (val === (val = input.val())) {return;}
// Enter new content into testSubject
var escaped = val.replace(/&/g, '&').replace(/\s/g,' ').replace(/</g, '<').replace(/>/g, '>');
testSubject.html(escaped);
// Calculate new width + whether to change
var testerWidth = testSubject.width(),
newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
currentWidth = input.width(),
isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
|| (newWidth > minWidth && newWidth < o.maxWidth);
// Animate width
if (isValidWidthChange) {
input.width(newWidth);
}
};
testSubject.insertAfter(input);
$(this).bind('keyup keydown blur update', check);
});
return this;
};
})(jQuery);
EDIT: Найдено по: Is there a jQuery autogrow plugin for text fields?
просто наблюдение, этот плагин не работает при вставке текста, а также не позволяет пользователю нажимать и удерживать один ключ. –
Почему бы не сделать непосредственно testSubject.text (val) 'вместо escape? Val? –
@DennisPlucinik, добавляющий привязку к событию 'input', должен помочь исправить проблему вставки – philfreo
Я не думаю, что есть идеальное решение этой проблемы, потому что вы не можете определить фактическую ширину текста, введенного во входной элемент. Все зависит от шрифта, который вы используете, настроек масштабирования в браузере и т. Д.
Однако, если вы можете выбрать шрифт, в котором вы можете фактически рассчитать количество пикселей, которые имеют текст (это самая сложная часть, но я думаю, вы можете попытайтесь как-то это оценить). Вы можете использовать это, чтобы изменить ширину поля ввода.
$('input').keyup(function() {
// I'm assuming that 1 letter will expand the input by 10 pixels
var oneLetterWidth = 10;
// I'm also assuming that input will resize when at least five characters
// are typed
var minCharacters = 5;
var len = $(this).val().length;
if (len > minCharacters) {
// increase width
$(this).width(len * oneLetterWidth);
} else {
// restore minimal width;
$(this).width(50);
}
});
+1 для простого, сжатого кода, который действительно работает! –
Этот маленький фрагмент был всем, что мне нужно. Я также добавил два простых правила css, так что расширение и сжатие лучше для пользователя: переход: ширина 0,4 с; -webkit-transition: ширина 0,4 с;/* Safari */ –
По умолчанию, ширина входа управляется параметром size, который для type="text"
соответствует количеству символов в ширину она должна быть.
Поскольку это измеряется символами, а не пикселями, фактический размер пикселя контролируется используемым шрифтом (фиксированной ширины).
Если вы измените ширину ввода в CSS при изменении параметров размера, это не повлияет на фактическую ширину элемента. – RaYell
(Отредактировано: с помощью .text()
вместо .html()
, чтобы получить право форматирования.)
Здравствуйте, я не знаю, если вы все еще ищете, но я натолкнулся на это, когда искал сценарий, чтобы сделать то же самое. Поэтому надеюсь, что это поможет любому, кто пытается это сделать, или что-то подобное.
function editing_key_press(e){
if(!e.which)editing_restore(this.parentNode);
var text = $('<span>')
.text($(this).val())
.appendTo(this.parentNode);
var w = text.innerWidth();
text.remove();
$(this).width(w+10);
}
Логика этого кода поместить содержимое на страницу в пролете, а затем получает ширину этого контента и удаляет его. Проблема, с которой я столкнулся, заключалась в том, что я должен был заставить ее работать как на клавишном, так и на клавиатуре, чтобы она работала успешно.
Надеюсь, это поможет, возможно, не так, как я делал только jquery в течение короткого промежутка времени.
Благодаря
Джордж
Это было прекрасно! Я добавил .hide() в текст, на всякий случай, пока текст текста не будет отображаться, его не видно. –
Мне это нравится, но оно не работает при наборе пробелов. – CoderDennis
Чтобы заставить его работать с пробелами, можно заменить все «» на « » перед вставкой в элемент фиктивного span. –
Я использовал seize's answer, но сделал эти изменения:
Между установкой
isValidWidthChange
и// Animate width
:if (!isValidWidthChange && newWidth > minWidth && newWidth > o.maxWidth) { newWidth = o.maxWidth; isValidWidthChange = true; }
Таким образом, вход будет расти, как большой, как вы позволили это, когда его содержимое слишком велико, чтобы соответствовать максимальной ширине.
После
$(this).bind('keyup keydown blur update', check);
:// Auto-size when page first loads check();
Смотрите эту JQuery плагин: https://github.com/padolsey/jQuery.fn.autoResize
Я просто проверял его с текстовыми полями, и это работает! Поддерживает автоматическое увеличение текстовых полей, ввод [тип = текст] и ввод [тип = пароль].
UPD. Похоже, что первоначальный автор удалил репо из github. Плагин не был обновлен в течение долгого времени и оказался довольно неудобным. Я могу предложить вам только лучшее решение. Я сделал запрос на загрузку этого плагина когда-то, поэтому у меня есть a copy of it в моей учетной записи github, используйте его только в том случае, если вы хотите его улучшить, он не пуленепробиваемый!
Кроме того, я обнаружил, что инфраструктура ExtJS имеет автоматическую реализацию для текстовых полей, см. Свойство конфигурации grow. Хотя из этой структуры нелегко вырезать эту небольшую логику, она может дать вам несколько хороших идей в отношении подхода.
Эта ссылка приводит к странице 404 GitHub. – CoderDennis
Да, автор удалил его. См. Мой обновленный ответ. –
Я просто думал о том же. Текстовое поле должно изменить его самостоятельно, поскольку пользователь вставляет в него текст. Я никогда не использовал его, но у меня есть идея, как это сделать. Что-то вроде этого:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
</head>
<body>
<table border="1">
<tr>
<td>
<span id="mySpan">
<span id="mySpan2"></span>
<input id="myText" type="text" style="width:100%" onkeyup="var span = document.getElementById('mySpan2');var txt = document.getElementById('myText'); span.innerHTML=txt.value;">
</span>
</td>
<td>
sss
</td>
</tr>
</table>
</body>
</html>
У меня есть плагин JQuery на GitHub: https://github.com/MartinF/jQuery.Autosize.Input
Он использует тот же подход, как захватить Ответим, но есть некоторые изменения, указанные в комментариях.
Вы можете увидеть живой пример здесь: http://jsfiddle.net/mJMpw/6/
Пример:
<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-нотации для атрибута ввода-автозапуска ввода для входного элемента.
Конечно, вы также можете просто инициализировать его с помощью JQuery
$("selector").autosizeInput();
Попробуйте этот код:
var newTextLength = Math.floor($("input#text).val() * .80);
$("input#text").attr("size",newTextLength);
- 1. Ввод текста автоматический десятичный
- 2. ввод текста/размер TextArea
- 3. Как выбрать автоматический ввод текста?
- 4. Сделать автоматический ввод текста (zipcode)
- 5. автоматический ввод текста в форму?
- 6. Редактирование текста Textarea Jquery
- 7. Автоматический ввод текста в перспективную встречу
- 8. Ввод текста из jquery не работает
- 9. Phonegap, textarea не принимает ввод
- 10. Textarea автоматический разрыв строки
- 11. Ввод текста сценария JQuery
- 12. ввод текста в textarea супер медленный, когда много текста внутри
- 13. JQuery и ввод текста
- 14. Автоматический ввод сфокусированного элемента jQuery ui (автозаполнение)
- 15. JQuery подсказка не работает на ввод текста
- 16. Автоматический ввод в jar
- 17. SDL (автоматический) ввод клавиатуры
- 18. JQuery получить предыдущий ввод текста
- 19. JQuery ввод текста действует смешно
- 20. jQuery: Подтвердить ввод пустого текста
- 21. как автоматический ввод
- 22. Автоматический ввод записи
- 23. Автоматический ввод пароля iphone
- 24. Отключить многострочный ввод на Textarea
- 25. автоматический ввод текста ввода в окно поиска Yahoo
- 26. JQuery: как получить ширину текста внутри textarea
- 27. позиция div ниже текста в textarea jquery
- 28. Ввод текста калитки исчезает после setEnable на TextArea
- 29. сделать ввод текста autoresize как ввод
- 30. HTML: ввод текста не представляется
Так что это не возможно, только с помощью CSS и HTML? – Costa