首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用jQuery .on()获取元素

使用jQuery .on()获取元素
EN

Stack Overflow用户
提问于 2012-07-09 23:10:38
回答 2查看 2.6K关注 0票数 1

如果我像这样使用jQuery的.on()函数(还有更多,但这是提取的主要问题区域):

代码语言:javascript
运行
复制
$(document).on("click", 
          $("#contcont a, #leftnav li a, #leftnav li ul a, #mainarea-home a").not(".secitem-mid a"),
    function clicker(event, sData) {

    var $this = $(this);

    sHREF = $this.attr("href");

    alert(sHREF);

} );

我没有定义,那么什么是获取被点击元素的最好方法呢?我需要.on(),以便它总是发生,显然,而不是每次加载新数据时都必须将它附加到所有元素(这是通过雅虎!商店,所以有必要这样做)。谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2012-07-09 23:17:04

on的第二个参数是一个选择器,而不是jQuery对象;它用于事件委托。

如果你打算直接把它们联系起来,那么:

代码语言:javascript
运行
复制
$("#contcont a, #leftnav li a, #leftnav li ul a, #mainarea-home a").not(".secitem-mid a").on("click", function clicker(event, sData) {

    var $this = $(this);

    sHREF = $this.attr("href");

    alert(sHREF);

});

如果您真的想使用事件委托,.not部件会让它变得有点棘手,因为(取决于您的标记)您可能需要在主系列中的每个选择器上重复它。由于这很难看,您最好在处理程序函数中处理这个特定的情况:

代码语言:javascript
运行
复制
$(document).on("click", "#contcont a, #leftnav li a, #leftnav li ul a, #mainarea-home a", function clicker(event, sData) {

    var $this = $(this);

    // Handle the "not" part
    if (!$this.is(".secitem-mid a")) {
        sHREF = $this.attr("href");

        alert(sHREF);
    }
});

但是:通常最好将委托放在离您想要处理的元素最近的容器中。如果您的#contcont#leftnav#mainarea-home元素不是动态的,我可能会考虑将委托放在它们而不是document中,例如:

代码语言:javascript
运行
复制
$("#contcont"     ).on("click", "a:not(.secitem-mid a)", clicker);
$("#leftnav"      ).on("click", "li a:not(.secitem-mid a)", clicker);
$("#mainarea-home").on("click", "a:not(.secitem-mid a)", clicker);
function clicker(event, sData) { ... }

注意,我只需要三个,而不是四个;#leftnav li a已经涵盖了您的#leftnav li ul a选择器。

还有一点离题:注意您使用的是命名函数表达式,它可以是tricky on IE8 and earlier。我上面的最后一个例子去掉了这一点,使其成为一个函数声明。

票数 7
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11397907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档