有没有办法将带有.bind()的eventData与“keydown”eventType一起使用?

时间:2011-03-23 10:05:20

标签: javascript jquery javascript-events

我正在尝试做类似的事情:

var keydownHandler = function (ev) {
    alert(ev.data.test);
    return false;
}

$(document).bind('keydown', {test: 'foo'}, keydownHandler);

但是 .bind 似乎不起作用,因为它返回 null 并且按下一个键不会触发处理程序。使用“click”eventType替换“keydown”,事件处理程序已正确注册并正常工作。

我当前的代码使用这样的匿名函数:

var config = ...;
$(document).bind('keydown', config.shortcut, function (e) {
    config.click();
    e.stopPropagation( );
    e.preventDefault( );
}

return false;
} );

它工作正常,但我必须外化匿名函数,我不知道如何传递它所需的额外信息。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您提供的第一个示例适用于我(如此处的小提琴所示:http://jsfiddle.net/YFBsE)。

如果要提取匿名函数(例如,重用它),并且需要将数据传递给不同用例和用例的函数,则应考虑使用如下所示的方法:

function buildHandler (data) {
    return function (event) {
      alert(data.test);

        return false;
    }; 
};

$(document).bind('keydown', buildHandler({ test: 'foo' }));
$(document).bind('click', buildHandler({ test: 'bar' }));

在此处查看此行动:http://jsfiddle.net/U8cvk/

答案 1 :(得分:0)

这是因为加载了hotkeys plugin,需要设置“combi”参数:

var keydownHandler = function (ev) {
    alert(ev.data.test);
    return false;
}

$(document).bind('keydown', {combi: 'x', test: 'foo'}, keydownHandler);