0

我在我的项目中发现了一个点,我正在检测箭头键按下并正在使用:

$(document).bind('keypress', function(event) {
    alert("Handler for .keypress() called.");
});

并且正在研究并发现我可以使用它来代替:

$(document).keypress(function() {
    alert("Handler for .keypress() called.");
});

我最喜欢第二个,它看起来更干净。他们似乎在做同样的事情。所以...

  • 我为什么要使用.bind()
  • 这些不做同样的事情吗?
4

4 回答 4

1

你给出的两个例子确实做了同样的事情——从 jQuery 1.7 开始,这两个例子都被弃用了

来自http://api.jquery.com/bind/

从 jQuery 1.7 开始,.on() 方法是将事件处理程序附加到文档的首选方法。

这些附加事件处理程序的旧方法要求在附加事件处理程序时元素存在于 DOM 中。有更智能(更不用说更有效)的方法可以对更新的版本执行相同的操作 - 这通常称为委托。你应该看看.on()

于 2013-03-01T16:46:41.700 回答
1

.keypress()或任何其他类似命名的函数.click().hover()只是该函数.on()的简写

于 2013-03-01T16:49:55.267 回答
1

jQuery 文档是你的朋友!

  • .bind()已被弃用,因此按照此处的建议,如果您使用的是 jQuery 1.7+,则不应使用它。
  • .on()是在 jQuery 1.7+ 中附加事件处理程序的首选方式。
  • .keypress()是许多“特殊”的特定事件附加器之一(大多数通常调用.on().bind()无论如何),并且根据文档,可能在浏览器、浏览器版本和平台之间具有不同的行为。

鉴于这三个功能的信息,您最好的选择应该是使用.on().

于 2013-03-01T16:50:42.880 回答
0

这主要是个人喜好。你是对的,它们都做同样的事情......但是,它们在最新版本的 jQuery 中已被弃用

正如安德鲁在您的评论中提到的那样,使用on,而不是bind

on为您提供了额外的好处,即能够使用相同的函数为绑定初始化时可能存在或不存在的元素绑定委托处理程序:

$('#someExistingElement').on('keypress', handler); //normal binding

$('#someExistingElement').on('keypress', '.some-child-element-that-doesnt-exist', handler); //delegate binding

请原谅可怕的类名和 id 的......仅用于演示目的:D

于 2013-03-01T16:48:19.190 回答