javascript - 多个选择器上的 jQuery on() 方法

标签 javascript jquery jquery-1.7

自版本 1.7 live 已弃用。

下面的例子很容易兼容新的on方法:

$('nav li, #sb-nav li, #help li').live('click', function () {
    // code...
});

使用 on:

$('nav, #sb-nav, #help').on('click', 'li', function () {
    // code...
});

如何使用on重写下面的例子?

 $('#header .fixed-feedback-bn, #sb-sec .feedback-bn').live('click', function () {
     // code...
 });

最佳答案

$(document).on('click', '#header .fixed-feedback-bn, #sb-sec .feedback-bn', function () {
     // code...
 });

.live() 只是将文档绑定(bind)为监听器。

我的两分钱是你几乎总能找到比 document 更好的听众。至少,几乎所有页面都使用主要内容包装器。这消除了页眉、页脚中的节点,有时还消除了作为监听器的侧边栏中的节点。

.on 用作委托(delegate)函数的最佳方法是识别预期永远不会被销毁或以其他方式解除事件绑定(bind)的最近的共同祖先。例如,如果您有一个通过 ajax 请求更新和更改的表单,则监听器可以是表单节点本身(如果仅更新表单的内容)或围绕表单的容器元素(通常是 div)。如果不存在这样的 div,您可以随时添加它,或者您可以沿着树向上移动到下一个祖先。

[编辑添加:]

在提供的特定示例代码中,很难说是否有更好的监听器同时包含 #header#sb-sec。但是假设这些东西共享一个 id 为“mainContainer”的祖先,您更高效的代码只需换掉监听器:

$('#mainContainer').on('click', '#header .fixed-feedback-bn, #sb-sec .feedback-bn', function () {
   // code...
});

关于javascript - 多个选择器上的 jQuery on() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462027/

相关文章:

javascript - 第一次单击复选框时不调用函数

javascript - 更新的状态在方法的返回语句中没有用

javascript - 重复菜单中所选选项和类似所选菜单中的值 Java Script、PHP

jquery - 无法在 jquery 中删除克隆

jquery - jQuery BBQ-Plugin 是否仍可与 JQuery 1.7x 一起使用?

javascript - 获取错误 "Form submission canceled because the form is not connected"

jQuery 1.7 clientX/pageX 未定义

javascript - 当您使用 jQuery .removeClass() 时,它会在没有该类的元素上运行时返回错误吗?

jquery - 如何在每个div中包裹元素

jquery - 单击按钮时如何获取先前选择的下拉值?