2011-05-06 72 views
0

无法找到我想要实现的明确答案。我相信这很简单,但我错过了它。方法之间的jquery传递变量

我会在页面上建立一个链接列表,每个链接都有一个“prettyLink”类,每个链接都会有一个标题。在鼠标悬停时,我试图将该标题存储在一个变量中,并删除标题,然后在鼠标悬停状态下将该标题替换为存储的标题。 (基本上去掉标题,同时将鼠标悬停并把它回来时,打探出)

这里是代码:

$('a.prettyLink').mouseover(function() { 
    var oldTitle = this.title; 
    $(this).removeAttr('title'); 
}).mouseout(function() { 
    $(this).attr('title',oldTitle); 
}); 

任何帮助表示赞赏。谢谢!

回答

6

只需声明变量的mouseover()方法之外:

var oldTitle; 
$('a.prettyLink').mouseover(function() { 
    oldTitle = this.title; 
    $(this).removeAttr('title'); 
}).mouseout(function() { 
    $(this).attr('title',oldTitle); 
}); 

JS Fiddle demo

在方法之外声明变量允许在方法内分配变量的值,并且可以在其他地方使用该新值。

+0

该死,你以20秒完全相同的答案打我。 +1 – Ryan 2011-05-06 20:41:43

+0

@minitech:* muahahahahaaaaaa ...!* ***咳嗽***对不起...= D – 2011-05-06 20:45:22

+0

+1内容:attr(title);'in'a:after'在你的jsFiddle的css中。我不知道你可以这样做。 – 2011-05-06 20:50:10

2
var oldTitle; 
$('a.prettyLink').mouseover(function() { 
    oldTitle = this.title; 
    $(this).removeAttr('title'); 
}).mouseout(function() { 
    $(this).attr('title',oldTitle); 
}); 

应该工作。

+0

谢谢!!!不错,干净,作品完美 感谢大家的投入 – Stuck 2011-05-06 20:58:03

3

您需要在本地作用域之外保存oldTitle。我喜欢使用jQuery的.data()方法。

$('a.prettyLink').mouseover(function() { 
    $(this).data('oldTitle', this.title); 
    $(this).removeAttr('title'); 
}).mouseout(function() { 
    $(this).attr('title',$(this).data('oldTitle')); 
}); 
0

你可以尝试的页面,这将持有该变量上放置一个隐藏<span id="title"></span>和你总是只设置/从跨度得到。

然后使用您的代码:

$('a.prettyLink').mouseover(function() { 
    var oldTitle = this.title; 
    $('#title').val(oldTitle); 
    $(this).removeAttr('title'); 
}).mouseout(function() { 
    $(this).attr('title',$('#title').val()); 
}); 

另一种方法是申报oldTitle作为全球在你的页面,使用这种方式。

+0

把它我试图避免,如果我可以 – Stuck 2011-05-06 20:52:01

+0

我同意,只是另一种方式:) – slandau 2011-05-06 20:53:29

0

考虑使用data()http://api.jquery.com/jQuery.data/

这与该事件被绑定到元素存储值的优势,而声明全局变量可能会被来自执行相同操作的其他元素的事件覆盖。

+0

我试过在函数中使用数据,但它似乎仍然不工作 ie function(data){ – Stuck 2011-05-06 20:50:20

1

如果使用hover事件会更好:

var oldTitle; 
$('a.prettyLink').hover(function() { 
    oldTitle = this.title; 
    $(this).removeAttr('title'); 
},function() { 
    $(this).attr('title',oldTitle); 
}); 

这是因为mouseover触发很多次,只hover一旦进入(相当于mousenter

希望这有助于。干杯

0

这里我sollution

$(".swap").mouseover(function() { 
    var $img = $(this).find('img'); 
    $(this).data('oldSrc', $img.attr('src')); 
    $img.attr("src", $img.data('alt-src')); 
}).mouseout(function() { 
    var $img = $(this).find('img'); 
    $img.attr("src", $(this).data('oldSrc')); 
}); 

<div class='swap'><img src='mysrc' data-alt-src='new_src'/></div>