以下代码之间有什么不同吗?

$('#whatever').on('click', function() {
     /* your code here */
});

$('#whatever').click(function() {
     /* your code here */
});

推荐答案

我认为,区别在于使用模式.

我更喜欢.on而不是.click,因为前can使用更少的内存,并且用于动态添加的元素.

考虑下面的HTML:

<html>
    <button id="add">Add new</button>
    <div id="container">
        <button class="alert">alert!</button>
    </div>
</html>

我们通过以下方式添加新按钮

$("button#add").click(function() {
    var html = "<button class='alert'>Alert!</button>";
    $("button.alert:last").parent().append(html);
});

想要"alert !"显示alert .我们可以用"click"或"on"来表示这一点.


When we use click

$("button.alert").click(function() {
    alert(1);
});

通过以上步骤,将为every single element创建一个与 Select 器匹配的separate处理程序.这意味着

  1. 许多匹配元素将创建许多相同的处理程序,从而增加内存占用
  2. 动态添加的项目将不会有处理程序-即,在上面的html中,新添加的"Alert!"除非重新绑定处理程序,否则按钮将不起作用.

When we use .on

$("div#container").on('click', 'button.alert', function() {
    alert(1);
});

有了上面的内容,与您的 Select 器(包括动态创建的 Select 器)匹配的all elementssingle处理程序.


...another reason to use .on

正如阿德里安在下面 comments 的那样,使用.on的另一个原因是名称空间事件.

如果你添加一个.on("click", handler)的处理器,你通常会用.off("click", handler)删除它,这将删除这个处理器.显然,只有当你有一个函数的引用时,这才有效,所以如果你没有呢?您可以使用名称空间:

$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });

通过解除绑定

$("#element").off("click.someNamespace");

Jquery相关问答推荐

JQuery - 从先前 Select 的下拉列表中隐藏/显示选项

如何使 jQuery.ready 中定义的函数在全局可用?

jQuery找到最近的匹配元素

模糊事件阻止点击事件工作?

JavaScript 或 jQuery 字符串以实用函数结尾

jQuery.parseJSON 单引号与双引号

是否可以使用 javascript 打开一个弹出窗口,然后检测用户何时关闭它?

如何在jQuery中 Select 具有特定ID的所有元素?

如何使用 jQuery 或 JavaScript 模拟单击​​按钮的动作?

如何使用 jQuery 显示忙碌指示器?

jQuery淡出不显示无?

使用 Javascript|jQuery 删除特定的内联样式

按值对 Html Select 的选项进行排序的最有效方法是什么,同时保留当前选定的项目?

如何使用 jQuery 进行带命名空间的 XML 解析

Jquery - 如何获取样式显示属性无/块

jQuery - 从元素内部 Select 元素

如何淡出显示:inline-block

在某个点停止固定位置滚动?

如何确定滚动高度?

使用 jQuery 检测元素内容的变化