Ловля вкладок в TextArea

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

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

8
задан user122147 9 July 2009 в 17:43
поделиться

2 ответа

Я не тестировал подробно, но, похоже, это работает:

(Я нашел функцию "insertAtCursor" на http://alexking.org/blog/2003/ 06/02/interting-at-the-cursor-using-javascript # comment-3817 )

<textarea id="text-area" rows="20" cols="100"></textarea>

<script>
document.getElementById("text-area").onkeydown = function(e) {
  if (!e && event.keyCode == 9)
  {
    event.returnValue = false;
    insertAtCursor(document.getElementById("text-area"), "    ");
  }
  else if (e.keyCode == 9)
  {
    e.preventDefault();
    insertAtCursor(document.getElementById("text-area"), "    ");
  }
};

//http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript#comment-3817
function insertAtCursor(myField, myValue) {
  //IE support
  if (document.selection) {
    var temp;
    myField.focus();
    sel = document.selection.createRange();
    temp = sel.text.length;
    sel.text = myValue;
    if (myValue.length == 0) {
      sel.moveStart('character', myValue.length);
      sel.moveEnd('character', myValue.length);
    } else {
      sel.moveStart('character', -myValue.length + temp);
    }
    sel.select();
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
    myField.selectionStart = startPos + myValue.length;
    myField.selectionEnd = startPos + myValue.length;
  } else {
    myField.value += myValue;
  }
}
</script>

EDIT : изменен сценарий, поэтому он не использует jQuery.

9
ответ дан 5 December 2019 в 20:18
поделиться

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

-1
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: