我正在构建一个匹配元素的插件,在它内部找到一个链接并使父元素在点击后进入该位置。将一个jQuery点击事件绑定到foreach循环中的每个元素
我在主体的循环:
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#一个有一个标题为 “跳转到/产品/”,当点击进入/产品/
DIV#一个具有的标题是“跳转到/思想/”,并在点击后进入/思维/
相反,发生的事情是:
DIV#一个有一个标题为“跳转到/产品/”,当点击进入/思/(警报说/思/太)
DIV#一个有标题“跳到/思考/”,当点击去思考/
即div#a结束了错误的行为。我猜这是一些范围问题,但对我来说,我看不到它,帮助!
在此之后不久,我学习了闭包的真正工作方式,之后我学到了真正的东西JS真的可以通过阅读Crockford! – Sqoo 2012-05-06 20:05:14
所以真正的答案是使用闭包来强制新的范围。 – Sqoo 2012-05-06 20:06:06
答案#2太棒了!解决了我的问题:) – Yasser 2012-10-04 06:27:21