2013-05-02 4 views
7

Ich habe ein Feld, das sich selbst während der Eingabe "korrigiert". Wir haben einige Code geschrieben, dass diese Funktionalität verhindert, wenn die Pfeiltasten gedrückt werden:Wie kann ich ein Keyup-Ereignis auslösen und den Schlüssel weitergeben?

handleKeyUp: function(e) { 
    var arrowKeys = _.range(37, 41), 
     key = e.which; 

    // allow user to move cursor by keyboard 
    if ($.inArray(key, arrowKeys) < 0) { 
     this.removeInvalidCharacters(); 
    } 
}, 

Wir möchten eine Unit-Test für diese schreiben; wir können jedoch nicht herausfinden, wie e.which über $input.trigger('keyup') übergeben werden. Ich weiß, dass der zweite Parameter des Triggers uns erlaubt, "Extra-Optionen" zu senden; Dies übergibt jedoch nur Werte mehr Werte an die handleKeyUp-Funktion. Ideen?

Antwort

14

Versuchen Sie, diese -

var e = $.Event("keyup"); 
e.which = 37; 
$input.trigger(e); 

http://api.jquery.com/category/events/event-object/

Ab jQuery 1.6, können Sie auch ein Objekt zu jQuery.Event() und seine Eigenschaften übergeben wird auf die neu erstellte Ereignis eingestellt werden Objekt.

// Create a new jQuery.Event object with specified event properties. 
var e = jQuery.Event("keydown", { keyCode: 64 }); 

// trigger an artificial keydown event with keyCode 64 
jQuery("body").trigger(e); 
+1

Diese Antwort ist großartig, ich wusste nicht, dass Sie das tun können. – jraede

+0

gut es funktioniert für mich .. thnx –

0

I erlauben würde handleKeyUp entweder ein Ereignisobjekt oder eine ganze Zahl zu annehmen. Fügen Sie einfach eine zusätzliche Zeile hinzu, um festzulegen, was key ist, abhängig vom Typ e. Dann kann Ihr Komponententest handleKeyUp(40) ausführen. Dies setzt natürlich voraus, dass der Zweck Ihres Komponententests nicht darin besteht, die keyup Handler an den Eingängen zu testen.

Verwandte Themen