2009-09-23 11 views
68

Mit jQuery, wie kann ich eine KeyPress simulieren (triggern?), Wenn ein Link geklickt wird? Zum Beispiel, wenn ein Benutzer klickt auf den folgenden Link:Keypress simulieren mit jQuery

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

Dann wird durch Klicken auf den Link, wäre es, als ob sie die „Leertaste“ auf ihrer Tastatur gedrückt.

Etwas Ähnliches, ich gehe davon aus:

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

Alle Ideen, wie dies zu erreichen?

+0

Ich bin neugierig - whe Wenn Sie versuchen, "Klick" durch die Leertaste zu ersetzen, wollten Sie wirklich, dass der Browser auf der Seite nach unten scrollt? Das Drücken der Leertaste auf einem Link hat normalerweise den gleichen Effekt wie das Drücken der Bild-nach-unten-Taste. –

+1

[This] (http://stackoverflow.com/questions/596481/simulate-javascript-key-events) könnte Ihre Frage beantworten. – themis

Antwort

11

Das Tastendruckereignis von jQuery soll diese Art von Arbeit erledigen. Sie können das Ereignis auslösen, indem Sie eine Zeichenfolge "keypress" an .trigger() übergeben. Um jedoch genauer zu sein, können Sie auch ein jQuery.Event-Objekt übergeben (geben Sie den Typ als "keypress" an) und alle gewünschten Eigenschaften bereitstellen, z. B. den Schlüsselcode als Leertaste.

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

die oben Dokumentation für weitere Details lesen.

+44

Sicher, lesen Sie die Dokumentation, aber das Plakat wusste das wahrscheinlich schon. Die jQuery-Ereignisdokumentation ist etwas undurchsichtig.Andrew Culver gab eine direkte Antwort und eine Referenz für weitere Informationen. –

10

Sie könnten versuchen, diese Tastaturbefehle jQuery-Plugin:

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

$(element).sendkeys(string) Einsätze String an der Einfügemarke in einen Eingang, Textbereich oder ein anderes Element mit contenteditable = true. Wenn sich der Einfügepunkt derzeit nicht im Element befindet, merkt er sich, wo der Einfügepunkt war, als sendkeys zuletzt aufgerufen wurde (wenn der Einfügepunkt niemals im Element war, hängt er an das Ende).

+0

Dieser funktionierte perfekt für mich Danke! – Jmlevick

+0

Sie brauchen jQuery nicht, um dies zu verwenden, Sie können die gleiche Funktionalität verwenden, indem Sie nur die bililiteRange-Bibliothek aufrufen: https://github.com/dwachss/bililiteRange (tatsächlich ist das jQuery-Plugin nur ein dünner Wrapper diese unglaubliche Bibliothek, die für sich steht). – fiatjaf

124

Ich glaube, das ist das, was Sie suchen:

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

Von here.

+12

Dies wird keinen tatsächlichen Text erzeugen, wenn es zum Beispiel mit der Eingabesteuerung verwendet wird. –

+4

@AlexBurtsev - Sie haben Recht, das ist, weil dies nur den Ereignishandler auslöst, als ob die spezifische Taste gedrückt wurde, aber nicht tatsächlich drückt diese Taste wie passiert, wenn eine Taste auf der Tastatur gedrückt wird (wahrscheinlich aus Sicherheitsgründen) – BornToCode

+3

Gibt es einen Grund, warum du "$" und "jQuery" vermischst? –

4

Dies funktioniert:

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

[var Ereignis = jQuery.Event ('Tastendruck'); event.which = 13; event.keyCode = 13; jQuery (this) .trigger (event);] probiere das – anu

+0

Ich musste in einem Dialog auf Enter klicken, also habe ich mit dem Snippet hier * this * durch * # myEl * ersetzt .. danke – gnB

+0

das funktioniert nicht für mich –

27

Eine weitere Option:

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

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

+1

Ich bin nicht sicher, was das 'which' ist, nur der' keyCode' funktioniert für mich in SAPUI5 (jQuery 2.2.3 auf Chrome) –

-1

Wenn Sie Browser wollen Aktionen wie "Rückgängig" oder "Wiederholen" simulieren, sollten Sie versuchen, diese:

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

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

Diese Antwort hat nichts damit zu tun die Frage – slfan

+0

Wie hängt das mit der Frage zusammen? –

+0

Auf diese Weise können Sie auch Klicks von Browserereignissen simulieren – parismiguel