Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.04.2017, 14:24
Новичок на форуме
Отправить личное сообщение для evgeniy2 Посмотреть профиль Найти все сообщения от evgeniy2
 
Регистрация: 27.04.2017
Сообщений: 6

Chrome не обновляет позицию курсора, если он сдвигается Backspace`ом?
Есть функция, которая вставляет текст или символ в поле textarea в позицию курсора. Все отлично работает. Но в Хроме текст вставляется в то место, где курсор был до его смещения влево Backspace`ом. Если курсор ставится мышкой или перемещается стрелочками влево, вправо, то работает нормально. Видимо, Хром не обновляет позицию курсора, только если он смещается Backspace`ом. Проверял в Firefox. Там никаких глюков нет.

Код кажется нелогичным, потому что я немного упросил функцию, на самом деле также могут вставляться парные теги вокруг выделенного текста, но суть глюка не меняется.
function str_insert( str, ta ) //ta = textarea
{
  ta.focus();
 
  if( typeof(ta.selectionStart) != "undefined" )
  {
    var start = ta.selectionStart;
    var end = ta.selectionEnd;
    var slen = end-start;
    var scrollTop = ta.scrollTop;
 
    var rs = (ta.value.substr(start, slen)) + str;
    ta.value = ta.value.substr(0,start) + rs + ta.value.substr(end);
 
    ta.setSelectionRange(start+rs.length, start+rs.length);
 
    ta.scrollTop = scrollTop;
    ta.focus();
  }
}

Действительно есть такой глюк в Хроме или это у меня где-то ошибка?
Ответить с цитированием
  #2 (permalink)  
Старый 27.04.2017, 14:40
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

В ИЕ, ФФ, Опере нормально, в Хроме - как написано.
<textarea style="width:500px;height:100px">Есть функция, которая вставляет текст или символ в поле textarea в позицию курсора. Все отлично работает. Но в Хроме текст вставляется в то место, где курсор был до его смещения влево Backspace`ом. </textarea>
<button onclick="str_insert('Test', document.querySelector('textarea'));"  >Вставить Тест</button>
<script>
function str_insert( str, ta ) //ta = textarea
{
  ta.focus();
 
  if( typeof(ta.selectionStart) != "undefined" )
  {
    var start = ta.selectionStart;
    var end = ta.selectionEnd;
    var slen = end-start;
    var scrollTop = ta.scrollTop;
 
    var rs = (ta.value.substr(start, slen)) + str;
    ta.value = ta.value.substr(0,start) + rs + ta.value.substr(end);
 
    ta.setSelectionRange(start+rs.length, start+rs.length);
 
    ta.scrollTop = scrollTop;
    ta.focus();
  }
}
</script>

Последний раз редактировалось Dilettante_Pro, 27.04.2017 в 14:43.
Ответить с цитированием
  #3 (permalink)  
Старый 27.04.2017, 15:51
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

evgeniy2, да в Chrome глюк: на blur после backspace не обновляется индекс курсора. Еще заметил что на focus (непрограммный) индекс всегда 0 в Chrome, Opera, Yandex, Safari. На input индекс нормально обновляется и во всех браузерах. Получается что проблемы возникают только на сменах фокуса.
<textarea></textarea>
<script>
var t = document.querySelector('textarea');
t.onfocus = t.onblur = t.oninput = function(e) {
	console.log(e.type, this.selectionStart, this.selectionEnd);
};
</script>

Последний раз редактировалось Rise, 27.04.2017 в 15:53.
Ответить с цитированием
  #4 (permalink)  
Старый 27.04.2017, 16:11
Новичок на форуме
Отправить личное сообщение для evgeniy2 Посмотреть профиль Найти все сообщения от evgeniy2
 
Регистрация: 27.04.2017
Сообщений: 6

И что делать? Ждать, когда исправят баг, или пытаться придумать костыль?
Ответить с цитированием
  #5 (permalink)  
Старый 28.04.2017, 10:53
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

evgeniy2, написал им 716327, как я понял по 714425, которая поглотила мою, это сломалось с 14 февраля, обрати внимание что там это проявляется немного по другому на двух переносах строки, значит могут быть еще и другие глюки)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена курсора, Javascript, расширение chrome ekzo Opera, Safari и др. 4 07.02.2014 11:01
Получить координаты курсора в текстовом поле в пикселях prike Events/DOM/Window 4 23.05.2013 04:35
Chrome Обновление курсора mat_ppc Opera, Safari и др. 0 21.09.2010 07:20