Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Выделить текст внутри input при получении фокуса (https://javascript.ru/forum/jquery/11286-vydelit-tekst-vnutri-input-pri-poluchenii-fokusa.html)

InviS 16.08.2010 12:17

Выделить текст внутри input при получении фокуса
 
Подскажите, пожалуйста, как сделать выделение всего содержимого input :text, когда он получит фокус? (т.е. после нажатия на какой-то символ - в поле input уже будет этот символ)

exec 16.08.2010 12:42

select( this );

InviS 16.08.2010 12:52

Спасибо! получилось сделать $(this).select(). Скажите. пожалуйста, а как сделать обратное действие? Просто у меня такая вот фигня теперь: при фокусировке текст выделяется, но если ничего не изменять, то он так и останется выделенным даже при потере фокуса. Я хочу теперь, чтобы при потере фокуса выделение снималось. Можно ли? Как?

sysya 16.08.2010 14:04

select( false );

InviS 16.08.2010 16:43

Сделал проверку введенного числа на Float. Проверка выполняется при потере фокуса. Но я не могу фокус вернуть на место. Вот функции:
var input_temp;
function isFloat(value){
	var pattern=/^(\d+)[,.]?(\d*)$/;
	if (pattern.test(value)){
		var result = pattern.exec(value);
		if (result[2]=="") return result[1];
		else return result[1]+"."+result[2];
	}
	else return "error";
}

$(function(){
	$(":text").focus(function(){	// получение фокуса текстовым полем
		input_temp=this.value;
		$(this).select();
	});
	
	$(":text").blur(function(){	// потеря фокуса текстовым полем
		var number=$.trim($(this).val());
		if (number=="") this.value=input_temp;
		else {
			var result=isFloat(number);
			if (result!="error")
				this.value=result;
			else {
				alert("Ошибка ввода!");
				$(this).select().focus();
				return false;
			}
		}
	});
});

Если проверка даже и показывает, что введено не число, то фокус все равно теряется... что делать?

InviS 18.08.2010 05:06

Никто не сталкивался с таким, да?

pashak 23.07.2011 03:42

Я поражаюсь...
 
function isFloat(value){
	var pattern=/^(\d+)[,.]?(\d*)$/;
	if (pattern.test(value)){
		var result = pattern.exec(value);
		if (result[2]=="") return result[1];
		else return result[1]+"."+result[2];
	}
	else return "error";
}


Е*аный стыд, кто ж так делает-то???
Во-первых, если функция названа is-, то логически подразумевается, что возвращает она булево значение.
Во-вторых, самый простой код для буля:
function isFloat(value){
   return parseFloat(value)!=parseInt(value);
}

А в-третьих, эти ваши сраные jQuery мало чем могут помочь с фокусом. Поставь вместо
return false;
это:
var t=this;
   setTimeout(function f(){t.focus()},0);

BETEPAH 25.08.2011 13:04

А как можно выделить не весь текст, а часть?
 
Есть такой плагин http://www.jankoatwarpspeed.com/post...uery-CSS3.aspx на jQuery, но у него есть один недостаток, который хочется устранить.
Если выделяю какой-то текст с целью скопировать или отредактировать, то всплывающая панель с инструментами не нужна. Я сделал кнопку, которая ее закрывает, но при этом теряется выделение текста.
$(document).ready(function() {
            var mouseX = 0;
            var mouseY = 0;
            $("#abc").mousemove(function(e) {
                // получаем координаты курсора мыши
                mouseX = e.pageX;
                mouseY = e.pageY;
            });
            $("#abc").mousedown(function() {
                $("#menu").fadeOut("1000");
            });
            $("#abc").select(function() {
                // получаем координаты мыши в показанном меню
                $("#menu").css("top", mouseY - 5).css("left", mouseX + 10).fadeIn("1000");
            });
            $("#bold").click(function() {
                wrapText("[b]", "[/b]");
                $("#menu").fadeOut("1000");
            });
            $("#italic").click(function() {
                wrapText("[i]", "[/i]");
                $("#menu").fadeOut("1000");
            });
            $("#underline").click(function() {
                wrapText("[u]", "[/u]");
                $("#menu").fadeOut("1000");
            });
            $("#udar").click(function() {
                wrapText("[ud]", "[/ud]");
                $("#menu").fadeOut("1000");
            });
            $("#link").click(function() {
                var url = prompt("Введите URL", "http://");
                if (url != null)
                    wrapText("[url=" + url + "]", "[/url]");
                $("#menu").fadeOut("1000");
            });
            $("#close").click(function() {
                wrapText("", "");
                $("#menu").fadeOut("fast");
            });
            function wrapText(startText, endText){
                // Получаем текст перед выделением
                var before = $("#abc").val().substring(0, $("#abc").caret().start);
                // Получаем текст после выделения
                var after = $("#abc").val().substring($("#abc").caret().end, $("#abc").val().length);
                // Объединяем текст перед выделением, измененное выделение и текст после выделения
                $("#abc").val(before + startText + $("#abc").caret().text + endText + after);
            }
        });

Подскажите, пожалуйста, как можно закрыть панельку выделив заново текст между before и after?

BETEPAH 27.08.2011 21:16

пока ждал помощи нашел вот такое решение: выделять заново, оказывается, не нужно. Достаточно просто вернуть в поле фокус :)
$("#close").click(function() {
      $("#menu").fadeOut("fast");
      $("#abc").focus();
}

vp111 14.10.2011 11:34

JavaScript error: val is not a function
 
Е*аный стыд, кто ж так делает-то???


Во-во ..Мне можно вот так же объяснить .Я твой язык бы понял))) Подсоби,дружище.вКонтакте слева сверху постоянно в красной рамке такая хрень вылезаетЧё сделать-то как убрать это.Я не догоняю чё это,но походу чё-то чую не то чё надо:write:

vp111 14.10.2011 11:35

Только ,если можно мне вот там без фокусов каких -то без буля и т.п. Просто как исправить и чё это такое вообще?Заранее примногоразблагодарен

fant777 09.06.2015 15:50

Может кому пригодится: (использовался jquery-2.1.3.min.js),
input'ы были помещены в <td> в ряд слева направо таблице (у каждого input'a свой td), работает по нажатию клавиш стрелок "влево"-"вправо". Код:

<script type="text/javascript">
$(document).ready(function(){
$('td input').keyup(function(k) {
var position;
switch (k.keyCode) {
case 39: // клавиша 'стрелка right'
position = $(this).parent().next();
break;
case 37: // клавиша 'стрелка left'
position = $(this).parent().prev();
break;
position.find('input').select();
});
});
</script>

Gmp 30.09.2015 17:12

Никак понять не могу (я пока еще зеленый), пытаюсь сделать чтоб при получении фокуса текстовым полем (хоть мышкой хоть клавой) содержимое инпута было выделено, т.е. вводимое значение заменяло старое значение, при этом если кликать или выделять текст, то чтобы все работало как обычно.
Если вешаю на onclick то любой клик соответственно выделяет все содержимое, если же onfocus (что вроде правильнее), то оно на долю секунды выделяет а потом выделение сбрасывается.
Подмогните кто чем может :(

<!doctype html>
<html lang="ru">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title></title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<style type="text/css">
	#table tr {
		background:#dee3e7;
		border:0;
	}
	#table th {
		background:#eec3c7;
		border:0;
	}
	input[type=text] {
		background-color: transparent;
		border: 1px solid transparent;
	}
	input[type=text]:focus {
		border-bottom: 1px dotted #c6d0d8;
		outline: none;
	}
	input[type=text]::selection {
		background: #c6d0d8;
	}
</style>
</head>

<body>

<table id="table" cellspacing="0" cellpadding="0">
<thead>
<tr>
	<th>№</th>
	<th>Name</th>
	<th>Password</th>
</tr>
</thead>
<tbody>
<tr>
	<td>1</td>
	<td><input type="text" value="Puh" /></td>
	<td><input type="text" value="wqqwe" /></td>
</tr>
<tr>
	<td>2</td>
	<td><input type="text" value="Pyatak" /></td>
	<td><input type="text" value="211122" /></td>
</tr>
<tr>
	<td>3</td>
	<td><input type="text" value="Sova" /></td>
	<td><input type="text" value="Soaasa" /></td>
</tr>
<tr>
	<td>4</td>
	<td><input type="text" value="Champion" /></td>
	<td><input type="text" value="Scxcc" /></td>
</tr>
<tr>
	<td>5</td>
	<td><input type="text" value="Tongue" /></td>
	<td><input type="text" value="werbvf" /></td>
</tr>
</tbody>
</table>

<script type="text/javascript">

	$('#table input').on('focus', function(){
		$(this).select();
	});

</script>

</body>
</html>


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