Выделить текст внутри input при получении фокуса
Подскажите, пожалуйста, как сделать выделение всего содержимого input :text, когда он получит фокус? (т.е. после нажатия на какой-то символ - в поле input уже будет этот символ)
|
select( this );
|
Спасибо! получилось сделать $(this).select(). Скажите. пожалуйста, а как сделать обратное действие? Просто у меня такая вот фигня теперь: при фокусировке текст выделяется, но если ничего не изменять, то он так и останется выделенным даже при потере фокуса. Я хочу теперь, чтобы при потере фокуса выделение снималось. Можно ли? Как?
|
select( false );
|
Сделал проверку введенного числа на 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; } } }); }); Если проверка даже и показывает, что введено не число, то фокус все равно теряется... что делать? |
Никто не сталкивался с таким, да?
|
Я поражаюсь...
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); |
А как можно выделить не весь текст, а часть?
Есть такой плагин 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? |
пока ждал помощи нашел вот такое решение: выделять заново, оказывается, не нужно. Достаточно просто вернуть в поле фокус :)
$("#close").click(function() { $("#menu").fadeOut("fast"); $("#abc").focus(); } |
JavaScript error: val is not a function
Е*аный стыд, кто ж так делает-то???
Во-во ..Мне можно вот так же объяснить .Я твой язык бы понял))) Подсоби,дружище.вКонтакте слева сверху постоянно в красной рамке такая хрень вылезает ![]() |
Только ,если можно мне вот там без фокусов каких -то без буля и т.п. Просто как исправить и чё это такое вообще?Заранее примногоразблагодарен
|
Может кому пригодится: (использовался 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> |
Никак понять не могу (я пока еще зеленый), пытаюсь сделать чтоб при получении фокуса текстовым полем (хоть мышкой хоть клавой) содержимое инпута было выделено, т.е. вводимое значение заменяло старое значение, при этом если кликать или выделять текст, то чтобы все работало как обычно.
Если вешаю на 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:42. |