将.live()转换为.on()时选择器中的变量

时间:2015-11-10 19:28:53

标签: jquery

我正在尝试使用已弃用的.live()函数对某些代码进行现代化。但是一个调用在选择器中使用了一个变量,我不知道如何正确地将它转换为.on()语法。不推荐使用的代码是:

    $('.selector .item a', $cal_fields).live('click', function(){
        //do stuff
    });

我的初始(失败)尝试将其转换为.on()是:

$('body').on('click','.selector .item a, '+$cal_fields, function()

$ cal_fields变量的初始分配为

var $cal_fields     = $('#calendar_fields');

1 个答案:

答案 0 :(得分:0)

为此,您需要模拟 .live()正在做的事情。当您致电.live()时,实际正在发生的事情是jQuery将事件绑定到document,然后检查event.target是否与您的选择器匹配。

另一个问题是您的$cal_fields变量。由于加载页面时#calendar_fields(可能)不存在,我们每次都需要重新评估该选择器,以获取元素。

所以,你可以尝试这样的事情:

$(document).on('click', $cal_fields.selector+' .selector .item a', function(){
});

$cal_fields.selector将返回用于制作该jQuery对象(选择器)的字符串。

此外,$('.selector .item a', $cal_fields)只是$cal_fields.find('.selector .item a')的简写,因此'#calendar_fields .selector .item a'应该是等效的。