【问题标题】:Best practice for trapping certain keyCodes in onkeypress in JavaScript在 JavaScript 中的 onkeypress 中捕获某些键码的最佳实践
【发布时间】:2011-03-05 18:28:53
【问题描述】:

在 HTML input 标记中捕获 ENTER 键时,我对“最佳实践”有些好奇。在 IE 中,这很容易。 window.event.keyCode 将是 13 当按下 enter 并且它非常简单。在所有其他浏览器中,参数对象被传递给函数。但是,这似乎基本上迫使您将函数处理程序后期绑定到对象。你可以这样做:

myInput.onkeypress = function (args) {
   window.alert(args.keyCode);
};

但是,如果你想这样做:

<input onkeypress="checkEnter()" />

然后基本上checkEnter() 将被一个匿名函数(理论上它具有参数对象)调用,然后它会在没有参数的情况下调用checkEnter()。我猜你可以做一些完全古怪的事情,比如:

<input onkeypress="checkEnter(arguments)" />

我还没有尝试过,但我认为它可以工作。似乎这种设计基本上说后期绑定是捕获按键的唯一合理方法。我无论如何都不是 IE 的粉丝,但在我看来 IE 做对了这一点,而且他们的设计更出色。

我错过了什么吗?

【问题讨论】:

    标签: javascript html internet-explorer dom w3c


    【解决方案1】:

    查看如何使用jQuery 进行操作。

    javascript/jQuery 的另一个重要功能是您可以使其不显眼,因此您可以将脚本与 html 完全分离,从而提高可读性并且 javascript 可以被浏览器缓存。

    Grz,克里斯。

    【讨论】:

    • 关于不显眼的 JavaScript:这不是 jQuery 的特性,你也可以使用原生 JavaScript 来做到这一点。
    • 是的,我知道。嗯,再读一遍那句话,看来确实只是jQuery的一个特性。并不是要这样说明它可以被解释为这样。
    【解决方案2】:

    最佳做法是使用所谓的后期绑定。此外,至少在理论上,您应该使用 addEventListener 而不是 onkeypress。

    另一种方法是使用一些库绑定事件,例如jQuery。

    【讨论】:

      【解决方案3】:

      作为一般规则,无论如何,您都不应该在 HTML 标记中指定 JavaScript 函数。让 JavaScript 代码定义 JavaScript 需要做什么,让 HTML 完全不知道 JavaScript 的存在。

      对于事件处理程序,这确实意味着在脚本中绑定函数,而不是在 HTML 标记参数中。

      【讨论】:

      • 是的,这和我想的差不多。只是有时我有服务器端 HTML 生成的标签,带有 50 个复选框,我希望每个标签都有一个在线处理程序。处理程序的后期绑定意味着附加每个处理程序的 for 循环。仅供参考,我使用过 jQuery 并且喜欢它,而且我也非常喜欢 Yahoo! 的 YUI 库。两者都使这些事情变得更容易。感谢您的回复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      相关资源
      最近更新 更多