2010-07-03 60 views
3

我寫了這個快速提示功能,爲我聯繫:jQuery的.attr()的問題

$(function() { 
    $('a').hover(function(e) { 
    var title = $(this).attr('title'); 
    $('<div id="tooltip">' + title + '</div>').css({"top" : e.pageY + 12, "left" : e.pageX + 12}).appendTo('body'); 
    }, function() { 
    $('#tooltip').remove(); 
    }); 

    $('a').mousemove(function(e){ 
    $('#tooltip').css({"top" : e.pageY + 12, "left" : e.pageX + 12}); 
    }) 
}); 

我想刪除原題,因爲兼具是愚蠢的。我知道我應該去這樣的事情:

$('a').hover(function() { 
    $(this).attr('title', ''); 
}); 

問題是我無法將其添加回來。我試過了:

$(this).attr('title', title) //from my title variable 

但它失敗了。建議?

回答

6

存儲在title變量中的值是該函數的本地值,並且在該函數完成執行後丟失。

一個解決方案是將以前的標題存儲在元素的data()中。

var $th = $(this); 

$th.data('prevTitle', $th.attr('title')); 

然後在需要時訪問它(大概是在下一個懸停的函數中)。

var $th = $(this); 

$th.attr('title', $th.data('prevTitle')); 

您可以將變量聲明帶到兩個函數之外。

var title; 

$('a').hover(function(e){ 
    title = $(this).attr('title'); 
    $('<div id="tooltip">' + title + '</div>').css({"top" : e.pageY + 12, "left" : e.pageX + 12}).appendTo('body'); 
}, function(){ 
    $th.attr('title', title); 
    $('#tooltip').remove(); 
}); 

...但我認爲使用data()會更安全。

+0

這兩個函數之外的變量聲明是要走的路。 – 2010-07-03 11:31:04

+0

@Gert G @patrick 我用了var的外部聲明,它工作得很好。謝謝。 – andrei 2010-07-03 11:34:17

+0

@Gert - 你可能是對的,但不知怎的,我覺得把信息與元素聯繫起來會更好,即使效率稍差。也許不合理。 :o) – user113716 2010-07-03 11:34:27

2

您的標題變量只存在於第一個處理函數的作用域中。您必須將值存儲在其他可從第二個處理程序訪問的位置。

+0

謝謝。我不知道我失去了那個變量。我簡單地做了一個新的,現在它工作:) – andrei 2010-07-03 11:33:02