jquery - Javascript - Jquery,使用 'On' 方法(不是字符串)绑定(bind)动态选择器

标签 jquery events dynamic selector

我想使用“On”功能附加一个事件,因为其他事件已被贬值(live、delegate、click...)。

但问题是:如果我们生成对象,我们需要在参数中使用选择器,而这个参数是一个字符串!!

示例: (上下文:动态表)

//Wrong way

$("#dataTable tbody tr").on("click", function(event){
    alert($(this).text());
});

//Good way

$("#dataTable tbody").on("click", "tr", function(event){
    alert($(this).text());
});

如果我想使用“查找”方法来避免这种情况,我该怎么办

    // ?? (find div)
    $("#dataTable tbody").on("click", "tr > ul > li > ul > li > div", function(event){
            alert($(this).text());
        });

   // What I would like to do
    $("#dataTable tbody").on("click", $(this).find("div"), function(event){
            alert($(this).text());
        });

   //and I don't want to do this :
    $("#dataTable tbody").find('div').on("click", function(event){
            alert($(this).text());
        });

谢谢!

最佳答案

工作相当于:

// What I would like to do
$("#dataTable tbody").on("click", $(this).find("div"), function(event){
    alert($(this).text());
});

是...

// What I would like to do
$("#dataTable tbody").on("click", 'div', function(event){
    alert($(this).text());
});

如果您将 div 定位在嵌套列表内,那么您可能能够逃脱:

// What I would like to do
$("#dataTable tbody").on("click", 'ul ul div', function(event){
    alert($(this).text());
});

...但这取决于您的tbody中是否有其他ul;您只需要在选择器中足够具体,即可从考虑中删除其他元素。您很少需要像 tr > ul > li > ul > li > div 那样具体,在这种情况下,最好将类应用于靠近 的元素div (或 div 本身)并在其周围进行选择。

另请注意,只有 live() 会折旧。在撰写本文时 (1.7.2) delegate() 还没有,尽管我相信它会在 1.8 中出现。

没有讨论贬低 click() 或其对应的快捷方式。

关于jquery - Javascript - Jquery,使用 'On' 方法(不是字符串)绑定(bind)动态选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10448472/

相关文章:

javascript - 如何继承EventTarget对象?

javascript - CSS、JavaScript、HTML,如何将 div 内的文本与图像旁边的中间对齐?并为文字添加动画

javascript - 如何将事件监听器添加到按钮以及可以放入按钮的所有内容?

jquery - CSS 不影响特定元素

javascript - 绑定(bind)就绪功能和调整大小事件

php - SEO 和 ajax 加载的内容链接

c# - 如何在中继器内动态按钮/我总是得到相同的值

javascript - 将项目动态添加到现有列表

javascript - 禁用超链接

jquery - 如何通过 jQuery 获取内联背景图像的像素高度