Używam właściwości selectionStart, selectionEnd i selectionPosition dla obszaru tekstowego, którym manipuluję, ale potrzebuję zdarzenia, które powie mi, kiedy te wartości się zmienią?

Znalazłem zdarzenie wyboru dokumentu, ale to nie jest całkiem to, czego chcę. Uruchamia się bezpośrednio na dokumencie i robi to, gdy dowolny wybór w dokumencie ulegnie zmianie (za dużo). Potrzebuję czegoś ograniczonego do obszaru tekstowego.

Czy takie wydarzenie istnieje?

Jeśli tak się nie stanie, będę zmuszony użyć zdarzenia zmiany zaznaczenia dokumentu lub kombinacji klawiszy / myszy w obszarze tekstowym z kilkoma dodatkowymi warunkami, aby upewnić się, że rzeczywiście się zmienił.

0
Stephen Sorensen 20 listopad 2019, 04:49

1 odpowiedź

Wygląda na to, że nie możesz uruchomić zdarzenia zmiany wyboru w elemencie, więc będziemy musieli dodać coś do dokumentu.

Wybór odbywa się tylko raz w danym momencie, więc naprawdę nie ma problemu z jego odsłuchiwaniem i filtrowaniem w razie potrzeby. Pamiętaj, że wszystkie zdarzenia na elementach i tak rozprzestrzeniają się do document, po prostu nie słuchamy ich wszystkich.

Dodano fragment do wersji demonstracyjnej.

Snippet:

const target = document.querySelector('#content');

document.addEventListener('selectionchange', checkSelection);

function checkSelection(e) {
  if(document.activeElement !== target) {
    return;
  }
  
  console.log(document.getSelection().toString());
}
<textarea id="content">
  How do I check where the cursor is?
</textarea>

<textarea id="notme">
  Not this content please
</textarea>
1
Samuel Goldenbaum 20 listopad 2019, 06:04
Nie chcę, aby był uruchamiany przy każdym kliknięciu. Nie obsługuje to również przypadku, gdy użytkownik zmienia położenie / zaznaczenie kursora za pomocą klawiatury.
 – 
Stephen Sorensen
20 listopad 2019, 05:19