Nie, tęsknisz za zrozumieniem tej koncepcji. Nie tak to ma działać. wyzwalacz wywołuje tylko moduł obsługi zdarzeń. W rzeczywistości nie wydrukuje klucza. Jeśli chcesz zasymulować efekt drukowania klucza, po prostu dodaj klucz do wartości wejściowej i uruchom zdarzenie w tym samym czasie.
Nadia Alramli
Ciekawe, nie wiedziałem o tym. W takim przypadku możesz mi powiedzieć, czy uruchomienie zdarzenia spowoduje również jego uruchomienie w bibliotekach innych niż jquery. na przykład, jeśli mam onKeydown skonfigurowany w zwykłym JS, czy będzie on przechwytywał moje „fałszywe” wydarzenie?
mkoryak
2
tak, jeśli istniał onkeydown = '...' ustawiony jako zwykły js. Zostanie wywołany przez fałszywe zdarzenie. Nie byłem tego pewien. Ale zrobiłem szybki test i zadziałało.
Nadia Alramli
2
@Nadia Dzięki za to! Przeczytałem wszystkie odpowiedzi, zastanawiając się, dlaczego nic nie działało, zanim zdałem sobie sprawę, że moje oczekiwania były nieprawidłowe. Podejrzewam, że wielu innych ludzi będzie miało takie same nieporozumienia.
mikemaccana
3
Dwa lata później ... czytając stronę, wydaje się, że ostatecznym sposobem jest: $ ('input # search'). Trigger ($. Event ('keydown', {which: $. Ui.keyCode.ENTER, keyCode: $ .ui.keyCode.ENTER}));
molokoloco
Odpowiedzi:
365
Jeśli chcesz wyzwolić naciśnięcie klawisza lub zdarzenie keydown, wszystko, co musisz zrobić, to:
var e = jQuery.Event("keydown");
e.which =50;// # Some key code value
$("input").trigger(e);
Bardzo miła odpowiedź. Warto zauważyć, że jQuery.Event jest dostępny dla jQuery 1.3 lub nowszej. Stało się istotne w tym pytaniu: stackoverflow.com/questions/1823617/…
artlung
8
Nie działało to dla mnie z suwakiem interfejsu użytkownika jQuery. Musiałem ustawić kod e.keyCode jak odpowiedź OreiA poniżej.
crizCraig
2
fwiw, odniosłem większy sukces dzięki „keyup” dla mojej aplikacji
Pamiętaj tylko, aby zastąpić „keyCode” słowem „które”.
Richard Nienaber
Tak, musisz zdefiniować, który i keyCode ma być bezpieczny (jeśli detektor zdarzeń sprawdza e.keyCode, zadziała tylko wtedy, gdy zdefiniujesz keyCode podczas tworzenia obiektu jQuery.Event)
jackocnr
1
jQuery normalizuje który / keyCode, więc wstawienie któregoś z nich powinno zrobić jedno i drugie.
Nigel Angel,
+1 za link do api.jquery.com; i obecne wersje jQuery nie normalizują które / keyCode, więc powinieneś podać oba dla bezpieczeństwa
Victor
2
@SamuelLindblom Powinienem był napisać jaśniej: jQuery nie normalizuje przekazywanych właściwości zdarzeń .trigger(jQuery.Event('name', props)). Spójrz na przykład jsfiddle.net/9ggmrbpd/1 - właściwości wyzwalanego zdarzenia są przekazywane bez zmian. Kod źródłowy: github.com/jquery/jquery/blob/master/src/event.js#L739
Victor
68
Prawdziwa odpowiedź musi zawierać kod-klucza:
var e = jQuery.Event("keydown");
e.which =50;// # Some key code value
e.keyCode =50
$("input").trigger(e);
Mimo że strona internetowa jQuery mówi, że które i keyCode są znormalizowane, bardzo się mylą. Zawsze najbezpieczniej jest przeprowadzać standardowe kontrole dla różnych przeglądarek dla e.which i e.keyCode, aw tym przypadku po prostu zdefiniuj oba.
W przypadku, gdy trzeba wziąć pod uwagę bieżący wybór kursora i tekstu ...
To nie działało dla mnie dla aplikacji AngularJS w Chrome. Jak podkreśla Nadia w oryginalnych komentarzach, postać nigdy nie jest widoczna w polu wejściowym (przynajmniej takie było moje doświadczenie). Ponadto poprzednie rozwiązania nie uwzględniają bieżącego wyboru tekstu w polu wprowadzania. Musiałem użyć wspaniałego wyboru biblioteki jquery .
Mam niestandardową klawiaturę numeryczną na ekranie, która wypełnia wiele pól wprowadzania. Musiałem...
Na fokusie zapisz lastFocus.element
Po rozmyciu zapisz bieżący wybór tekstu (start i stop)
var pos = element.selection('getPos')
lastFocus.pos ={ start: pos.start, end: pos.end}
Wydaje się, że to nie działa, ponieważ używa argumentu extraParameters, który nie ustawia niczego w argumencie zdarzenia, ale dodaje dodatkowe argumenty do wywołania zwrotnego procedury obsługi zdarzeń.
Odpowiedzi:
Jeśli chcesz wyzwolić naciśnięcie klawisza lub zdarzenie keydown, wszystko, co musisz zrobić, to:
źródło
Nieco bardziej zwięzłe teraz dzięki jQuery 1.6+ :
(Jeśli nie używasz interfejsu użytkownika jQuery, wprowadź zamiast tego odpowiedni kod dostępu.)
źródło
.trigger(jQuery.Event('name', props))
. Spójrz na przykład jsfiddle.net/9ggmrbpd/1 - właściwości wyzwalanego zdarzenia są przekazywane bez zmian. Kod źródłowy: github.com/jquery/jquery/blob/master/src/event.js#L739Prawdziwa odpowiedź musi zawierać kod-klucza:
Mimo że strona internetowa jQuery mówi, że które i keyCode są znormalizowane, bardzo się mylą. Zawsze najbezpieczniej jest przeprowadzać standardowe kontrole dla różnych przeglądarek dla e.which i e.keyCode, aw tym przypadku po prostu zdefiniuj oba.
źródło
e.keyCode = e.which = 50;
w jednej linii byłoby ładniej. :)keyCode
nie działa. Musiałem ustawić oba, aby zadziałałoJeśli używasz również jQuery UI, możesz to zrobić w następujący sposób:
źródło
Zrobiłem to z keyup.
źródło
Ok, dla mnie to działa z tym ...
źródło
W przypadku, gdy trzeba wziąć pod uwagę bieżący wybór kursora i tekstu ...
To nie działało dla mnie dla aplikacji AngularJS w Chrome. Jak podkreśla Nadia w oryginalnych komentarzach, postać nigdy nie jest widoczna w polu wejściowym (przynajmniej takie było moje doświadczenie). Ponadto poprzednie rozwiązania nie uwzględniają bieżącego wyboru tekstu w polu wprowadzania. Musiałem użyć wspaniałego wyboru biblioteki jquery .
Mam niestandardową klawiaturę numeryczną na ekranie, która wypełnia wiele pól wprowadzania. Musiałem...
Po rozmyciu zapisz bieżący wybór tekstu (start i stop)
Po naciśnięciu przycisku na mojej klawiaturze:
źródło
Z tego chcesz to zrobić w jednym wierszu, którego możesz użyć
źródło
console.log( String.fromCharCode(event.charCode) );
chyba nie trzeba mapować postaci.
źródło
Można to osiągnąć tak jak w tych dokumentach
źródło