JavaScript类&;jQuery循环变量引用
我有循环函数和jqueryclick函数,我希望在单击之后执行特定的函数。id类很重要,因此与jQuery一样,单击定义。单击具有特定id的元素后,我想执行特定的函数。能改变的只有功能bJavaScript类&;jQuery循环变量引用,javascript,jquery,Javascript,Jquery,我有循环函数和jqueryclick函数,我希望在单击之后执行特定的函数。id类很重要,因此与jQuery一样,单击定义。单击具有特定id的元素后,我想执行特定的函数。能改变的只有功能b var a = { id: { "id1": function () { console.log(1) }, "id2": function () { console.log(2) }, "id3": function () { console.log(3) } }, b: function
var a = {
id: { "id1": function () { console.log(1) }, "id2": function () { console.log(2) }, "id3": function () { console.log(3) } },
b: function () {
$this = this;
for (v in $this.id) {
$("#" + v).click(function () {
$this.id[v]();
});
}
}
}
单击元素后,我想查看
id1=1、id2=2、id3=3
。但该代码为每个元素写入值3。这个例子很简单。问题是变量引用我知道,但我找不到正确的解决方案。谢谢将其包装在IFFE函数中。阅读更多关于范围和生命的信息
我提供了一个与你的问题相关的例子:
function(){
var$this=这个;
对于(var v=0;v与许多其他帖子重复。问题是,for
循环在实际调用单击处理程序时早已完成,因此v
具有循环的终值。解决方案是将单击处理程序赋值放在一个函数中,并将v
传递给该函数。这太复杂了事情。摆脱匿名函数,只需执行以下操作:$(“#”+v)。单击(this.id[v])
谢谢,但这不起作用。修复了它并添加了一个示例。Ecmascript 6中还有一个新功能,它通过一些语法糖解决了这个问题。它是一个名为“let”的关键字这在更少的行中解决了这个问题,尽管浏览器支持现在不是100%。thans,我更新了你的代码并开始工作,谢谢!
function() {
var $this = this;
for (var v = 0; v <= 4; v++) {
(function() {
var i = v;
$("#v" + i).on("click", function(e) {
e.stopPropagation();
alert('hi' + i);
});
})();
}
}