2013-05-02 15 views
7

Yazarken kendini "düzelten" bir alanım var. Bazı kod ok tuşlarına basıldığında bu işlevi önlediğini yazdım:Bir anahtar olayını nasıl tetikleyebilirim ve anahtarı nasıl geçirebilirim?

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(); 
    } 
}, 
Bunun için bir birim test yazmak istiyorum

; Ancak e.which'un $input.trigger('keyup') üzerinden nasıl geçeceğini anlayamıyoruz. Tetikleyicinin ikinci parametresinin "ekstra seçenekler" göndermemizi sağladığını biliyorum; Ancak, sadece handleKeyUp işlevine değerlerin daha fazla değerini iletir. Fikirler?

cevap

14

bu deneyin -

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

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

, ayrıca yeni oluşturulan Olay üzerine kurulacaktır jQuery.Event() ve özelliklerini bir nesneyi geçirebilir nesne.

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

Bu cevap harika, bunu yapabileceğinizi bilmiyordum. – jraede

+0

iyi çalışıyor bana .. thnx –

0

I handleKeyUp bir olay nesnesi ya da bir tam sayıyı ya da kabul etmek için izin verir. e türüne bağlı olarak, key'un ne olduğunu tanımlamak için fazladan bir satır ekleyin. Daha sonra birim testiniz handleKeyUp(40)'u çalıştırabilir. Bu, elbette, ünite testinizin amacının, girişlerdeki keyup işlemcilerini test etmediği varsayılmaktadır.

İlgili konular