1

我正在重构一些 javascript 以使用 jQuery,其中一个事件看起来像这样

document.onkeyup = function keyUp(e) {

if (e.keyCode == 70) { // 'f'
    //Do something
}
else if (e.keyCode == 78) { // 'n'
    //Do something else
} ...

不幸的是,案例中所做的事情并不像这个问题中的那样相似或简单。有没有更好的方法来编写这个而不是大量的硬编码 if/else 或 switch/case 语句?

4

2 回答 2

4

我不知道它是否真的更好,但是您可以将所有可能的值作为对象的键列出在您包含的其他一些专用文件中。例如:

var keyHandlers = {
    "70": function () { /* Do something */ },
    "78": function () { /* Do something else */ }
};

然后,在您的keyup事件处理程序中,您可以简单地引用此对象的适当属性:

document.onkeyup = function keyUp(e) {
    keyHandlers[e.keyCode]();
};

这种方法相对于语句的一个显着缺点switch是,如果您希望多个键执行相同的功能,它看起来会更加混乱。使用 a switch,您可以让这些案例失败。在这里,您必须在初始keyHandlers声明之后执行一些其他任务。


其他几点......你应该使用addEventListener而不是on...属性,你有理由命名你当前分配的函数onkeyup吗?命名它的唯一原因是如果您需要从其内部引用它。

于 2013-02-05T07:45:47.510 回答
2

使用对象将键码映射到功能:

var keyTable = {
  70: function () { ... },
  78: function () { ... },
  ... etc ...
}

然后您的事件处理程序变为:

document.onkeyup = function keyUp(e) {
  keyTable[e.keyCode]();
};
于 2013-02-05T07:46:02.533 回答