1

我正在尝试删除浏览器生成的标题框,该标题框与具有标题属性的锚点一起出现。我想这样做的原因是它不会干扰我的工具提示 jQuery。

截至目前,我正在删除悬停时的标题属性,但在将自己从悬停状态中删除后,它不会重新分配它。怎么来的?

http://jsfiddle.net/fj4xz/5/

4

5 回答 5

2

那是因为

var title

是在 HandlerIn 函数中,而不是在处理程序 out 中定义。最简单的解决方案是将 de var title 放在悬停函数之外,并将其分配到悬停处理程序中。

编辑:删除 Photon 所述的变量也是一种解决方案。我强烈建议您使用 vars。如果未定义全局变量,您的代码很快就会变得混乱且无法维护。但那只是我的个人意见。

http://jsfiddle.net/RubenJonker/fj4xz/6/

于 2012-06-05T04:44:28.290 回答
1

那是因为您的title变量在mouseenter函数内,但您在mouseleave. 您应该将title变量移到hover方法之外。

var title;
$('a.tooltip').hover(function() {
    title = $(this).attr('title');
    var offset = $(this).offset();
    var width = $(this).outerWidth();
    var height = $(this).outerHeight();
    $content = $('<div class="tooltip">' + title + '</div>').fadeIn('fast');
    $(this).append($content);
    $(this).attr('title', '');
    $content.offset({
        top: offset.top + height,
        left: offset.left + (width - $content.outerWidth()) / 2
    });
}, function() {
    $(this).find('div').fadeOut('fast');
    $(this).attr('title', title);
});​
于 2012-06-05T04:45:06.077 回答
1

你在那里声明var title = $(this).attr('title');你的第一个函数,但你的第二个函数不知道title.

于 2012-06-05T04:45:15.050 回答
1

它不会重新分配 title 值的原因是因为您在第一个函数中声明了 title 变量,这超出了第二个函数的范围。如果要保留原始标题值,则需要以第二个函数可以访问它的方式执行此操作。

相反,请尝试将其添加到数据值:

$(this).data("originalTitle", $(this).attr("title"));

然后在你的第二个函数中重新分配它:

$(this).attr("title", $(this).data("originalTitle"));

我会避免在页面上title设置和获取n 个链接的通用变量。将值存储为元素本身的数据对我来说似乎是一种更好的方法。

于 2012-06-05T04:45:40.687 回答
0

just remove all var declarations before variable name

it will become global variable See this

  $('a.tooltip').hover(function() {
        title = $(this).attr('title');
         offset = $(this).offset();
         width = $(this).outerWidth();
         height = $(this).outerHeight();
        $content = $('<div class="tooltip">' + title + '</div>').fadeIn('fast');
        $(this).append($content);
        $(this).attr('title', '');
        $content.offset({ top: offset.top+height, left: offset.left+(width-$content.outerWidth())/2 });
    }, function() {
        $(this).find('div').fadeOut('fast');
        $(this).attr('title', title);
    });​
于 2012-06-05T05:02:33.640 回答