我正在构建一个与元素匹配的插件,在其中找到一个链接,并使父元素在单击时转到该位置。
我的主体有一个循环:
return this.each(function(options)
{
$to_link = $(this); //matched object
link_href = $('a', $to_link).attr('href'); //link location
$($to_link,$parent)
.click(function(){alert(link_href); window.location = link_href; return false;})
.attr('title','Jump to ' + link_href);
})
我正在针对此HTML运行它
<div id="a"><h2><a href="/products/">Products</a></h2><p>blah blah</p></div>
<div id="b"><h2><a href="/thinking/">Thinking</a></h2><p>liuhads</p></div>
我遇到的问题是,尽管元素的标题具有正确的值,但单击功能始终导致跳转到最后匹配的div链接的值。
为了澄清,行为应该是:
div#a的标题为“跳转到/ products /”,并且单击时转到/ products /
div#a的标题为“跳转到/ thinking /”,并且单击时转到/ thinking /
相反,会发生什么:
div#a的标题为“跳转到/ products /”,当单击时转到/ thinking /(警报也显示/ thinking /)
div#a的标题为“跳转到/ thinking /”,并且单击时转到/ thinking /
即div#a的行为错误。我想这是某种范围的问题,但是对我而言,我看不到它,帮助!
最佳答案
您忘记了分配中的var
,因此您正在共享一个全局变量并使它们混淆。
$to_link = $(this); //matched object
link_href = $('a', $to_link).attr('href'); //link location
应该
var $to_link = $(this); //matched object
var link_href = $('a', $to_link).attr('href'); //link location
否则,link_href将保留最后一个值,即单击处理程序在调用时将看到的值。