如何触发keyup事件并传递密钥?

时间:2013-05-02 22:04:00

标签: jquery bdd

我有一个字段可以在您键入时“纠正”自己。我们编写了一些代码,当按下箭头键时会阻止此功能:

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

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

2 个答案:

答案 0 :(得分:14)

试试这个 -

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

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

  

从jQuery 1.6开始,您还可以将对象传递给jQuery.Event()和   它的属性将在新创建的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 :(得分:0)

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