属性更改时的变量更改,使其停止!使用live()

时间:2011-03-22 19:05:36

标签: jquery html

我正在重新利用工具提示插件来使用live()函数。我的问题是,当我将title属性设置为''以禁用浏览器工具提示时,它会重新触发该函数,并且不允许我将title属性替换为我存储的日期,因为它会更新引用它的所有变量。我在下面发布了我最好的破解。任何帮助将不胜感激。

$('#leadgen-cpm-cost-label').live('mouseover mouseout', function(e) {
    if (e.type == 'mouseover') {
    $(this).data(this, 'title', this.title);
    this.t = $(this).data('title');
    alert(this.t);
    this.title = ''; 
    this.top = (e.pageY + yOffset); this.left = (e.pageX + xOffset);

    $('body').append( '<p id="vtip"><img id="vtipArrow" />' + this.t + '</p>' );

    $('p#vtip #vtipArrow').attr("src", 'common/vtip_arrow.png');
    $('p#vtip').css("top", this.top+"px").css("left", this.left+"px").fadeIn("slow");
} else {
    this.title = this.t;
    $("p#vtip").fadeOut("slow").remove();
}});

1 个答案:

答案 0 :(得分:0)

您没有在事件之间存储原始标题(t)。我也不确定你是什么从这个事件定位的HTML元素中提取标题元素?我对更可行的解决方案的猜测将类似于以下内容,但我必须承认我基于缺乏信息而猜测。

$('#leadgen-cpm-cost-label').live('mouseover mouseout', function(e) {
    if (e.type == 'mouseover') {
        if ($(this).attr('active') == 'true') { return; }
        var original_title = $(this).attr('title');
        $(this).data('original_title', original_title);
        alert(original_title);
        $(this).attr('title', '');
        this.top = (e.pageY + yOffset); this.left = (e.pageX + xOffset);

        $('body').append( '<p id="vtip"><img id="vtipArrow" />' + original_title + '</p>' );

        $('p#vtip #vtipArrow').attr("src", 'common/vtip_arrow.png');
        $('p#vtip').css("top", this.top+"px").css("left", this.left+"px").fadeIn("slow");
        $(this).attr('active', 'true');
    } else {
        if (($this).attr('active') != 'true') { return; }
        $(this).attr('title', $(this).data('original_title');
        $("p#vtip").fadeOut("slow").remove();
        $(this).attr('active', 'false');
    }
});

我继续并添加了快速活动检查,这可能会帮助您,具体取决于调用的并发时间。