Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   input="text" с автошириной (https://javascript.ru/forum/dom-window/23026-input%3D-text-s-avtoshirinojj.html)

greatilya 09.11.2011 15:41

input="text" с автошириной
 
Не могу сообразить как сделать чтобы при вводе текста ширина у input="text" увеличивалась и уменьшалась исходя из объема текста в поле.
Иными словами чтобы ширина должна подгоняться вплотную к ширине введенного текста.

ksa 09.11.2011 15:55

Тут недавно рассматривался такой пример... Но для точнсти (хоть какой-то) - нужно использовать моноширный шрифт.

trikadin 09.11.2011 16:02

Была такая тема. Но вообще, как-то так:

<style>
#inp {
 font-family: monospace;
 font-size: 16px;
}
</style>
<input id="inp" />
<script>
el= document.getElementById("inp");
el.onkeydown=el.onkeyup=el.onchange=el.onkeypress= function(){
 this.style.width= this.value.length*12 + "px";
};
</script>

trikadin 09.11.2011 16:02

ksa, вот кстати нет. Использовал моноширинный - всё равно подглючивает.

greatilya 09.11.2011 16:08

trikadin,
да, этого мне вполне хватит, думал может есть что-то чего не знал ... :)

ksa 09.11.2011 16:12

Цитата:

Сообщение от trikadin
Использовал моноширинный - всё равно подглючивает.

Инпуты не так просты! :D

ksa 09.11.2011 16:18

Бивас, тест!

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
input {
	width: 10px;
	font-family: 'Courier New';
	font-size: 12pt;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
	var a=['click','keyup','select','focus']
	$(a).each(function(i){
		$('input').bind(a[i],function(){
			var i=this.value.length;
			i=(i==0)? 1: i;
			$(this).css('width',i*10+'px');
		});
	});
});
</script>
</head>
<body>
<input type='text' />
</body>
</html>

Вроде чётко работает... :)

Pavel M. 09.11.2011 17:27

можно в скрытом Диве дублировать строку из Инпута
и синхронизировать размеры,

в этом случае не обязательно моноширный шрифт

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
input, #hideEl {
    font-family: 'Times';
    font-size: 12pt;
}
input {
    width: 10px;
}
#hideEl {
    position: absolute;
    top: -9999px;
}
</style>
<script type="text/javascript">
$(document).ready(function () {
    var $hideEl = $('<div id="hideEl">'),
        $input = $('input'),
        a=['click', 'keyup', 'select', 'focus'];
    
    $hideEl.appendTo(document.body);
    
    $(a).each(function(i, v){
        $input.bind(v, function () {
            $hideEl.text(this.value);
            $input.width($hideEl.width() + 10);
        });
    });
});
</script>
</head>
<body>
<input type='text' />
</body>
</html>

ksa 10.11.2011 08:51

Цитата:

Сообщение от Pavel M. (Сообщение 135433)
position: absolute;
top: -9999px;

Неее, такое мне не нравится... :no:

Pavel M. 10.11.2011 10:26

Цитата:

Сообщение от ksa (Сообщение 135535)
Неее, такое мне не нравится... :no:

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


Часовой пояс GMT +3, время: 05:46.