绑定事件与.live()和item.length失败

时间:2012-03-02 11:11:37

标签: javascript jquery live

我正在为我的网站制作一个小工具提示功能

我完美地工作了:(在项目悬停检查时是否存在气泡并显示它。如果没有,发出请求,附加buble然后显示它)

$('.profileIcon').hover(function(){
    var u = $(this);
    var url = $(this).find('a').attr('href')+' #intro_usuario';

    if($(this).find('.nube').length>0){
        $(this).find('.nube').show();
    } else {
        //$('<div>').load(url).addClass('nube').css({'left':$(this).offset().left+$(this).outerWidth(true)+15,'top':$(this).offset().top}).appendTo(this).show();
        $('<div>').addClass('nube').addClass('nubeU').load(url,function(){
            $(this).css({'left':-20,'top':-16}).appendTo(u).show();
        });
    }
});

它只会在第一次用户悬停时发出请求并附加工具包(.nube)div,下次只会显示它(没有请求)。

但使用ajax加载更多元素我不得不回忆它所以我想要使用live

$('.profileIcon').live('hover',function(){
    var u = $(this);
    var url = $(this).find('a').attr('href')+' #intro_usuario';

    if($(this).find('.nube').length>0){
        $(this).find('.nube').show();
    } else {
       //$('<div>').load(url).addClass('nube').css({'left':$(this).offset().left+$(this).outerWidth(true)+15,'top':$(this).offset().top}).appendTo(this).show();
       $('<div>').addClass('nube').addClass('nubeU').appendTo(u).html($('#load').html()).load(url,function(){
           $(this) .css({'left':-20,'top':-16}).show();
       });
    }
});

每次都要完成请求,每次附加额外的气泡

问题是:

¿为什么if($(this).find('.nube').length>0停止使用直播?

1 个答案:

答案 0 :(得分:2)

我不会在.live()上浪费时间,而是转到新的替换.on()

.on()就像直接绑定到一个事件一样,但也像live一样工作。阅读文档以获取有关如何直接绑定和“bubble-bind”的详细信息。

尝试将.live()替换为.on(),它们应该正常工作。

用于直接绑定(将处理程序附加到元素):

element.on('event',function(){});

表示“bubble-bind”(注意element现在是第二个参数,并且父节点被赋予处理程序。将触发子节点,事件将冒泡到父节点以处理事件)< / p>

someParentElement.on('event','element',function(){});

另外,您在使用this时不必担心.on()是谁,它始终是您触发的元素,无论是直接还是泡泡。