Jaki jest najlepszy sposób na symulowanie użytkownika wprowadzającego tekst w polu tekstowym w JS i / lub jQuery?
I nie chcą faktycznie umieścić tekst w polu tekstowym, po prostu chcę, aby wyzwolić wszystkich zdarzeń teleskopowe , które normalnie uruchamiane przez użytkownika informacji wpisując w polu tekstowym. Oznacza to ostrość, klawisz w dół, naciśnięcie klawisza, aktywację klawisza i rozmycie. Myślę.
Jak więc można to osiągnąć?
źródło
$('item').trigger('keypress', {which: 'A'.charCodeAt(0)});
ctrlKey: true
, także:shiftKey
,altKey
Możesz wysyłać zdarzenia, takie jak
źródło
el.dispatchEvent(new Event('keypress', {keyCode: 'a'}))
Ctrl
:el.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70, ctrlKey: true }));
(Spowoduje to utworzenie skrótuCtrl + F
)Aby wywołać enternaciśnięcie klawisza, musiałem zmodyfikować odpowiedź @ebynum, w szczególności za pomocą właściwości keyCode.
źródło
keydown
wydarzenie nie jest przechwytywane, czy robię tu coś nie tak? fiddle.jshell.net/Palestinian/8d8J9Oto przykład vanilla js, który wyzwala dowolne zdarzenie:
źródło
Możesz to osiągnąć za pomocą:
EventTarget.dispatchEvent(event)
i przekazując nowe zdarzenie KeyboardEvent jako zdarzenie.Na przykład:
element.dispatchEvent(new KeyboardEvent('keypress', {'key': 'a'}))
Przykład pracy:
MDN dispatchEvent
MDN KeyboardEvent
źródło
Możesz teraz:
źródło
Przede wszystkim muszę powiedzieć, że próbka z Sionnach733 działała bez zarzutu. Niektórzy użytkownicy narzekają na brak rzeczywistych przykładów. Oto moje dwa centy. Pracowałem nad symulacją kliknięcia myszą podczas korzystania z tej strony: https://www.youtube.com/tv . Możesz otworzyć dowolny film i spróbować uruchomić ten kod. Wykonuje przejście do następnego wideo.
źródło
Pomyślałem, że zwróciłbym twoją uwagę, że w konkretnym kontekście, w którym słuchacz został zdefiniowany we wtyczce jQuery, jedyną rzeczą, która pomyślnie zasymulowała dla mnie zdarzenie naciśnięcia klawisza, ostatecznie przechwycone przez tego słuchacza, było użycie setTimeout (). na przykład
Jakiekolwiek użycie znaku
$("#txtName").keypress()
zostało zignorowane , chociaż zostało umieszczone na końcu.ready() function
. I tak żaden konkretny dodatek DOM nie był tworzony asynchronicznie.źródło
W przypadku rzutowania skryptu na KeyboardEventInit i podaj poprawną liczbę całkowitą keyCode
źródło