Как получить текущую позицию курсора (в текстовом поле) всякий раз, когда курсор или клавиша со стрелкой нажимаются ВНИЗ?

Я пытаюсь получить положение текстового курсора сразу после щелчка вниз мышью, чтобы изменить его положение. Проблема в том, что selectionStart и selectionEnd не возвращают самую текущую позицию курсора, поскольку "новая" позиция не сохраняется до отпускания щелчка. Фрагмент кода показывает эту проблему, когда вы пытаетесь изменить положение курсора с помощью мыши.

Это странно, потому что технически я могу печатать в «новой» позиции, как только щелкнуть мышью, но selectionStart по-прежнему возвращает старую позицию. Если положение курсора может четко измениться без отпускания щелчка, то как получить доступ к новой позиции, не дожидаясь mouseup?

(это также кажется проблемой для отслеживания положения курсора после нажатия клавиш)

const input = document.getElementById('myInput');
input.addEventListener('mousedown', showposition); // click

function showposition() {
  document.getElementById("output").innerHTML += " " + input.selectionStart;
}
<input id="myInput">
<p id="output"></p>


person Jake    schedule 10.06.2020    source источник


Ответы (1)


Используйте событие click вместо события mousedown. Это связано с тем, что в момент, когда запускается событие mousedown, selectionStart не будет обновлено, поэтому вы продолжаете получать предыдущие значения.

Событие щелчка, с другой стороны, представляет собой комбинацию событий mouseup + mousedown, которое фиксирует один полный щелчок мыши и возвращает ожидаемое значение положения курсора.

const input = document.getElementById('myInput');
input.addEventListener('click', showposition); // click

function showposition(event) {
  document.getElementById("output").innerHTML += " " + event.target.selectionStart;
}
<input id="myInput">
<p id="output"></p>

person It Assistors    schedule 10.06.2020
comment
спасибо! есть ли событие, которое учитывает только событие mousedown (а не mouseup)? например, если вы щелкнете по индексу 2, чтобы изменить положение курсора, наберете случайную строку, а затем отпустите мышь, то вместо конечной точки все равно будет выводиться 2? - person Jake; 10.06.2020