Tag: 闭包

承诺数组

我正在开发一个部分,我必须从不同城市的API获取json数据并构建DOM。 到目前为止,我已经能够做到这两点。 唯一的问题是不同城市的API响应时间不同。 所以,当我构建DOM时,它们与我调用函数的顺序不同。 从我记得我需要使用诺言来获得它的顺序。 我现在的问题是: 我怎样才能使用一系列承诺(因为我的输入会有所不同)。 另外我如何执行一系列承诺? 到目前为止我的工作代码: var base_path = “https://www.example.com/”; var cities = [ “San_Francisco”, “Miami”, “New_Orleans”, “Chicago”, “New_York_City” ]; function getData(city){ var path = base_path+city+”.json”; $.getJSON(path,function(data) { // build DOM }); } for(var i=0;i<cities.length;i++) { getData(cities[i]); } 谢谢!

在循环中绑定单击事件处理程序导致jQuery中的问题

我试图运行以下代码: 我将参数传递给函数,但它始终具有循环中最后一个对象的值。 我在stackoverflow上阅读了一些关于它的文章,但我无法找到如何让它在我的解决方案中运行。 该对象是从服务器返回的JSON对象。 它的所有价值都是正确的。 for(var i = 0;i<parents.length;i++){ var row = $(document.createElement("tr")); var colName = $(document.createElement("td")); var aDisplayCol = $(document.createElement("a")); var parentId = parents[i]['PARENT_ID']; aDisplayCol.attr("href","#").html(parents[i]['NAME']); aDisplayCol.bind('click',function(){ alert(parentId);}); colName.append(aDisplayCol); row.append(colName); $('#pages tbody').append(row); } 谢谢

JavaScript中的奇怪内容“for”

我正在使用jQuery,我有一个我不明白的奇怪的事情。 我有一些代码: for (i = 1; i <= some_number; i++) { $("#some_button" + i).click(function() { alert(i); }); } “#some_button”正如名字所说 – 它们是一些按钮。 点击后,他们应弹出一个带有号码的方框,对吗? 但他们没有。 如果有4个按钮,它们总是弹出“5”(按钮计数+ 1)。 为什么会这样?

如何在javascript中访问当前范围之外的变量?

我正在用javascript编写一个应用程序,无法弄清楚如何访问我的函数中声明的变量,在这个jquery解析中。 在里面我可以访问全局变量,但我真的不想为这些值创建全局变量。 基本上我想从simulationFiles变量中的xml文档中提取文件名。 我检查node属性是否与simName相等,并提取xml元素中的两个字符串,我认为这部分正在工作。 如何提取这些xml元素并将它们附加到局部变量? function CsvReader(simName) { this.initFileName = “somepath”; this.eventsFileName = “somepath”; $(simulationFiles).find(‘simulation’).each(function() { if ($(this).attr(“name”) == simName) { initFileName += $(this).find(“init”).text(); eventsFileName += $(this).find(“events”).text(); } }); }

jQuery闭包,循环和事件

我有一个类似于这里的问题: Javascript循环中的事件处理程序 – 需要一个闭包吗? 但是我正在使用jQuery,并且给出的解决方案似乎在绑定而不是点击时触发事件。 这是我的代码: for(var i in DisplayGlobals.Indicators) { var div = d.createElement(“div”); div.style.width = “100%”; td.appendChild(div); for(var j = 0;j 0) { var img = d.createElement(“img”); jQuery(img).attr({ src : DisplayGlobals.Indicators[i][j], alt : i, className: “IndicatorImage” }).click( function(indGroup,indValue){ jQuery(“.IndicatorImage”).removeClass(“active”); _this.Indicator.TrueImage = DisplayGlobals.Indicators[indGroup][indValue]; _this.Indicator.FalseImage = DisplayGlobals.IndicatorsSpecial[“BlankSmall”]; jQuery(this).addClass(“active”); }(i,j) ); div.appendChild(img); } } } 我尝试了几种不同的方法但没有成功…… […]