2013-05-02 11 views
7

Mam pole, które "poprawia" się podczas pisania. Mamy napisany kod, który uniemożliwia tę funkcję po naciśnięciu klawiszy ze strzałkami:Jak mogę uruchomić zdarzenie keyup i przekazać klucz?

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(); 
    } 
}, 

Chcielibyśmy napisać test jednostkowy; jednak nie możemy dowiedzieć się, jak przekazać e.which przez $input.trigger('keyup'). Wiem, że drugi parametr wyzwalacza pozwala nam wysłać "dodatkowe opcje"; jednak, że po prostu przekazuje wartości więcej wartości do funkcji handleKeyUp. Pomysły?

Odpowiedz

14

Spróbuj tego -

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

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

Jak jQuery 1.6, można również przekazać obiekt do jQuery.Event() i jego właściwości zostanie ustawiona na nowo utworzonym Event obiekt.

// 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

Ta odpowiedź jest wspaniała, nie wiedziałem, że możesz to zrobić. – jraede

+0

Dobrze, że to działa dla mnie .. thnx –

0

chciałbym pozwolić handleKeyUp przyjąć albo obiekt zdarzenia lub liczbę całkowitą. Wystarczy dodać dodatkową linię do określenia, co to jest key, w zależności od typu e. Wtedy twój test jednostkowy może uruchomić handleKeyUp(40). Zakłada to oczywiście, że celem twojego testu jednostkowego nie jest przetestowanie procedur obsługi keyup na wejściach.

Powiązane problemy