我正在构建一个与元素匹配的插件,在其中找到一个链接并使父元素在单击时转到该位置。
我在主体中有一个循环:
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>
我遇到的问题是,click函数总是会跳转到最后一个匹配div的链接的值,尽管该元素的标题具有正确的值。
澄清一下,行为应该是:
div#a的标题为“Jump to / products /”,点击后转至/ products /
div#a的标题为“Jump to / thinking /”,点击后转到/ thinking /
div#a的标题为“Jump to / products /”,点击后会转到 / thinking / (警告说/ think / too)
< / LI>div#a的标题为“Jump to / thinking /”,点击后转到/ thinking /
即div#a以错误的行为结束。我猜这是一个范围问题,但对于我的生活,我看不到它,帮助!
答案 0 :(得分:4)
您忘记了作业中的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将保留最后一个值,这是click处理程序在调用时将看到的值。
答案 1 :(得分:4)
这里的一般情况有一个更全面的答案
http://www.foliotek.com/devblog/keep-variable-state-between-event-binding-and-execution/
回答#2是使用闭包来强制新的范围:)