2009-09-23 3 views
68

Korzystając z jQuery, w jaki sposób mogę symulować (wyzwalać?) Klawisz KeyPress po kliknięciu łącza? Na przykład, gdy użytkownik kliknie następujące łącze:Symuluj hasło przy pomocy jQuery

<a id="clickforspace" href="#">Click Here</a> 

Następnie, klikając w link, byłoby jakby wciśnięty „spacji” na swojej klawiaturze.

Coś takiego, jestem przy założeniu:

$("#clickforspace").click(function(e) { 
    e.preventDefault(); 
    //... Some type of code here to initiate "spacebar" // 
             }); 

Wszelkie pomysły, w jaki sposób to osiągnąć?

+0

Jestem ciekawy - whe n próbujesz zastąpić 'kliknięcie' spacją, czy rzeczywiście chcesz, aby przeglądarka przewinęła stronę? Naciśnięcie klawisza spacji na łączu ma zazwyczaj ten sam efekt, co naciśnięcie klawisza w dół strony. –

+1

[This] (http://stackoverflow.com/questions/596481/simulate-javascript-key-events) może odpowiedzieć na twoje pytanie. – themis

Odpowiedz

11

Zdarzenie keypress z jQuery ma na celu wykonanie tego rodzaju pracy. Możesz wywołać zdarzenie, przekazując ciąg "keypress" do .trigger(). Jednak, aby być bardziej szczegółowym, można faktycznie przekazać obiekt jQuery.Event (określić typ jako "keypress") oraz podać dowolne właściwości, takie jak kod dostępu będący spacja.

http://docs.jquery.com/Events/trigger#eventdata

Czytaj powyższej dokumentacji po więcej szczegółów.

+44

Oczywiście, przeczytaj dokumentację, ale plakat prawdopodobnie już to wiedział. Dokumentacja zdarzeń jQuery jest nieco nieprzejrzysta.Andrew Culver udzielił bezpośredniej odpowiedzi oraz odnośnika, aby uzyskać więcej informacji. –

10

Można spróbować tej wtyczki SendKeys jQuery:

http://bililite.com/blog/2011/01/23/improved-sendkeys/

$(element).sendkeys(string) wstawia łańcuch na punkcie wstawiania w wejście, textarea lub inny element z contenteditable = true. Jeśli punkt wstawienia nie jest aktualnie w elemencie, pamięta on, gdzie punkt wstawienia był w momencie wywołania funkcji sendkeys (jeśli punkt wstawienia nigdy nie był w elemencie, dołączany jest do końca).

+0

Ten działał idealnie dla mnie Dzięki! – Jmlevick

+0

Do tego celu nie potrzebujesz jQuery, możesz użyć tej samej funkcjonalności, po prostu pobierając bibliotekę 'bililiteRange': https://github.com/dwachss/bililiteRange (w rzeczywistości wtyczka jQuery jest tylko cienkim opakowaniem ta niesamowita biblioteka, która stoi sama). – fiatjaf

124

Wierzę, że to jest to, czego szukasz:

var press = jQuery.Event("keypress"); 
press.ctrlKey = false; 
press.which = 40; 
$("whatever").trigger(press); 

Od here.

+12

Nie spowoduje to wyświetlenia rzeczywistego tekstu, na przykład w przypadku sterowania wejściami. –

+4

@AlexBurtsev - Masz rację, ponieważ powoduje to tylko uruchomienie procedury obsługi zdarzeń tak, jakby został naciśnięty określony klawisz, ale w rzeczywistości nie naciska tego klawisza, jak dzieje się po naciśnięciu klawisza na klawiaturze (prawdopodobnie ze względów bezpieczeństwa) – BornToCode

+3

Czy istnieje powód, dla którego mieszasz "$" i "jQuery"? –

4

to działa:

var event = jQuery.Event('keypress'); 
event.which = 13; 
event.keyCode = 13; //keycode to trigger this for simulating enter 
jQuery(this).trigger(event); 
+1

[var event = jQuery.Event ('keypress'); event.which = 13; event.keyCode = 13; jQuery (this) .trigger (event);] spróbuj tego – anu

+0

Musiałem kliknąć Enter w oknie dialogowym, więc z fragmentem tutaj zastąpiłem * this * z * # myEl * .. dziękuję – gnB

+0

to nie działa dla mnie –

27

Inna opcja:

$(el).trigger({type: 'keypress', which: 13, keyCode: 13}); 

http://api.jquery.com/trigger/

+1

Nie jestem pewien, do czego służy 'do'. Tylko klucz 'keyCode' działa dla mnie w SAPUI5 (jQuery 2.2.3 na Chrome) –

-1

Jeśli chcesz symulować działania przeglądarki jako "Cofnij" lub "przerobić", należy spróbować tego:

function doUndo(){ 
    document.execCommand('undo', false, null); 
} 

function doRedo(){ 
    document.execCommand('redo', false, null); 
} 
+0

ta odpowiedź nie ma nic wspólnego z pytanie – slfan

+0

Jak to jest związane z pytaniem? –

+0

W ten sposób można również symulować kliknięcia zdarzeń przeglądarki – parismiguel