2010-06-09 4 views
7

Я пытаюсь удалить атрибут title для ссылки при наведении, а затем добавить его обратно на мышь. Я хотел бы передать var hoverText для зависания ...jquery hover pass variable to callback function

Вот код, который у меня есть. Есть идеи?

$(".icon a").hover(function() { 
    $this = $(this); 
    var hoverText = $.data(this, 'title', $this.attr('title'));        
    $(this).find("em").animate({opacity: "show", top: "-35"}, "slow"); 
    $(this).find("em").text(hoverText);  

    $this.removeAttr('title');  


}, function(hoverText) {    

    $(this).find("em").animate({opacity: "hide", top: "-45"}, "fast");  
    $(this).attr("title", hoverText); 

}); 

ответ

1

Поместите «hoverText» в качестве глобальной переменной.

var hoverText = ''; 
$(".icon a").hover(function() { 
    $this = $(this); 
    hoverText = $.data(this, 'title', $this.attr('title'));        
    $(this).find("em").animate({opacity: "show", top: "-35"}, "slow"); 
    $(this).find("em").text(hoverText);  

    $this.removeAttr('title');  


}, function() {    

    $(this).find("em").animate({opacity: "hide", top: "-45"}, "fast");  
    $(this).attr("title", hoverText); 

}); 
+1

это работает, но я хочу держаться подальше от глобальных переменных любых мыслей? –

+2

Thats перевернутое ужасное решение ... Когда Assigning зависает, эта переменная определенно не останется прежней. –

6
$(".icon a").hover(function() { 
    $this = $(this); 
    $.data(this, 'title', $this.attr('title'));        
    $(this).find("em").animate({opacity: "show", top: "-35"}, "slow"); 
    $(this).find("em").text(hoverText);  

    $this.removeAttr('title');  


}, function(hoverText) {    

    $(this).find("em").animate({opacity: "hide", top: "-45"}, "fast");  
    $(this).attr("title", $.data(this, 'title'); 

}); 

Хитрость заключается в том:

$.data(this, 'title'); 

При использовании данных, вы эффективно хранить переменную на этом йот элемент для специальной цели вы только что описали. Вы также можете решить проблему, объявив эту переменную $ над вашей начальной функцией наведения, расширяя область охвата для обоих.

+0

Это то, что я пытался выяснить, как объявить его выше этого? Есть предположения? –

+0

Именно то, что я искал. Это отлично работает для создания простых всплывающих подсказок. Добавляем всплывающую разметку в в первой функции, сохраняем объект DOM в переменной, сохраняем эту переменную в объекте $ .data, получаем доступ к ней во второй функции, чтобы погасить ее. – Mike