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ł.
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>