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

时间:2012-05-04 12:01:30

标签: 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'方法以避免这种情况,我该怎么做

    // ?? (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());
        });

谢谢!

2 个答案:

答案 0 :(得分:3)

工作相当于:

// 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());
});

...但这取决于你ul中是否有其他 tbody;你只需要在你的选择器中足够具体,以便从考虑中删除其他元素。很少需要像tr > ul > li > ul > li > div那样具体,在这种情况下,最好将一个类应用于更接近div(或div本身)的元素,并且选择那个而不是。

另请注意,只有live()折旧。在撰写本文时(1.7.2)delegate()不是,但我相信它会在1.8中。

没有关于贬值click()或它的快捷方式的说法。

答案 1 :(得分:1)

如果要选择嵌套列表中的DIV元素,那么这将是一种方法:

$( '#foo' ).on( 'click', 'ul ul div', function () { 

但是,我建议上课。只需在DIV元素上设置一个类,然后:

$( '#foo' ).on( 'click', '.bar', function () {