2013-05-02 38 views
7

我有一个字段可以在您键入时“纠正”自己。我们有一些写的代码,以防止当按下方向键此功能:如何触发一个keyup事件并传递密钥?

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

我们愿为此编写单元测试;但是,我们无法弄清楚如何通过$input.trigger('keyup')传递e.which。我知道触发器的第二个参数允许我们发送“额外选项”;然而,这只是将更多的值传递给handleKeyUp函数。想法?

回答

14

试试这个 -

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

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

在jQuery 1.6中,你也可以通过一个对象jQuery.Event()和 其属性将新创建的事件设置目的。

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

这个答案很好,我不知道你能做到。 – jraede 2013-05-02 22:07:48

+0

它对我有用.. thnx – 2014-10-14 06:14:18

0

我将允许handleKeyUp接受一个事件对象或一个整数。只需添加额外的行来定义key是什么,具体取决于e的类型。然后你的单元测试可以运行handleKeyUp(40)。当然,这是假定单元测试的目的不是测试输入上的处理程序。

相关问题