2012-06-05 21 views

回答

2

那是因爲

var title 

在HandlerIn功能,並在處理了沒有定義。 最簡單的解決方法是將de var標題放在懸停函數之外,並將其分配給懸停處理程序。

編輯:刪除Photon所述的變量也是一個解決方案。我強烈建議你使用增值稅。如果沒有定義全局變量,您的代碼很快就會變得混亂和不可維護。但那只是我的個人意見。

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

+0

我沒有說不要用VAR,但我認爲沒有變得混亂和難以維護,而不var如果你想使用變量作爲全局變量。如果你想將任何變量聲明爲全局變量,那麼首先聲明你想要在哪裏使用它,而不是在函數聲明或開始時聲明,這很容易和用戶友好。 – Trikaldarshi

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); 
});​ 
1

你在你的第一個函數聲明var title = $(this).attr('title');那裏,但你的第二個功能沒有的title知識。

1

它不會重新分配標題值的原因是因爲您在第一個函數中聲明瞭標題變量,這超出了第二個函數的範圍。如果你想保留原來的標題值,你需要這樣做,第二個函數可以訪問它。

相反,嘗試將其添加到數據值:

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

然後你的第二個函數內重新分配它:

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

我會避免通用title可變浮動周圍您正在設置和獲取n頁面上的鏈接。將這些值作爲數據存儲在元素本身上似乎對我來說是一種更好的方法。

0

只是刪除所有VAR聲明變量名

之前它將成爲全局變量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); 
    });​