[第一次在stackoverflow。]我试图动态地添加html按钮到我的页面,然后给他们一个JavaScript函数运行时,他们被点击,使用jQuery的点击。我想为数组中的每个元素都有一个按钮,所以我使用了一个for循环。我的代码看起来像这样(简体)迭代jQuery选择器变量,使用闭包
for (var i = 0; i < results.length; i++) {
$("#" + place[i].place_id).click(function(){console.log("Test");})
$("#" + place[i].place_id).click();
}
(我注射用正确的ID在同一回路的按钮。)此代码,在运行时,控制台日志“测试”的时间正确的号码,但事后,只最后一个按钮在点击时响应“测试”。 (这种情况有点荒谬。)所以,我认为事件处理程序最终只使用了我的最终值来分配事件处理程序。我认为这个问题与闭包有关,但我不确定如何从jQuery Selector中取出一个闭包(通常我不熟悉它们)。相反,作为一种黑客解决方案,我“手动”编写了类似于下面和下面的for循环的代码,并且它按预期工作,因为点击会导致控制台日志。
$("#" + place[0].place_id).click(function(){console.log("Test"););
$("#" + place[1].place_id).click(function(){console.log("Test");});
etc.
(当然,这一切都更大范围内发生 - 特别是谷歌地图的地方API调用的回调)
首先,我在正确认识这个问题?其次,有什么用?我应该完全采取不同的方法,比如使用.each()?
(我后来想显示的地方属性[I]点击时,我会觉得需要另一个回调 我最后黑客的代码如下所示:
$("#" + place[0].place_id).click(function(){google.maps.event.trigger(placeMarkers[0], "click"); repeated 20 times
它在[这](http://jsfiddle.net/Cerlin/koj2efmg/) – 2014-12-02 05:55:23
[创建循环中关闭精细:一常见的错误](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide /Closures#Creating_closures_in_loops.3A_A_common_mistake) – 2014-12-02 05:56:06
[JavaScript闭合内部循环 - 简单实用示例](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – 2014-12-02 05:56:34