Как сделать текстовую область редактируемой? - PullRequest
1 голос
/ 28 апреля 2009

У меня есть textarea, который преобразует английский в хинди onkeyup событие. Но когда я перемещаю каретку назад для редактирования, первая буква, которую я набираю, преобразуется в хинди, и каретка перемещается в конец строки. Можно ли сохранить каретку в той же точке в пределах textarea, чтобы она не перемещалась до конца строки?

1 Ответ

0 голосов
/ 22 апреля 2013

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

Вы хотите получить значение каретки до того, как вы замените текст и установите его снова после замены.

Stackoverflow Ответ: Получить позицию каретки - Код из связанного ответа ниже без изменений

function getCaret(el) { 
  if (el.selectionStart) { 
    return el.selectionStart; 
  } else if (document.selection) { 
    el.focus(); 

    var r = document.selection.createRange(); 
    if (r == null) { 
      return 0; 
    } 

    var re = el.createTextRange(), 
        rc = re.duplicate(); 
    re.moveToBookmark(r.getBookmark()); 
    rc.setEndPoint('EndToStart', re); 

    return rc.text.length; 
  }  
  return 0; 
}

Stackoverflow Ответ: Установить позицию каретки - Код из связанного ответа ниже без изменений

function SetCursorPosition(pos)
{
    // HERE txt is the text field name
    var obj=document.getElementById('<%= txt.ClientID %><%= txt.ClientID %>');

    //FOR IE
    if(obj.setSelectionRange)
    {
        obj.focus();
        obj.setSelectionRange(pos,pos);
    }

    // For Firefox
    else if (obj.createTextRange)
    {
        var range = obj.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}

Есть несколько других способов обойти это, избегая замены всего текста в событии key up и перемещая его в нажатие кнопки, размытие / расфокусировка или что-то еще. Это позволяет вам не беспокоиться о том, что положение каретки сбрасывается до конца.

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

...