每个和$.post的闭包
Closures with each and $.post
我有一个要编辑的项目列表
<form id="mainForm" action="machin_chose">
<div><input name="field" value="chouchouette" /></div>
<div class="modified><input name="field" value="trutruc" /></div>
<div class="modified"><input name="field" value="machin" /></div>
</form>
并在每个修改的项目上发布ajax
$('#mainForm div.modified').each(function () {
item = $(this);
$.post(
$('#mainForm').attr('action')
, $(this).find(':input').serialize()
, function (data) {
item.removeClass('modified');
}
});
};
成功发布的项目应删除其modified
类
我尝试使用item
的闭包来保留当前修改的闭包
但由于它是异步的,item
总是包含最后一个修改过的。
如何在成功处理程序中检索当前发布的项目?
您需要使用var
将item
的范围限定到每个迭代。
var item = $(this);
代码的问题是没有使用闭包;item
变量是全局的,因为您没有在函数中声明它。
只需更改:
item = $(this);
至:
var item = $(this);
现在,循环中的每个迭代都有自己的变量。
您也可以使用发送给函数的参数,但是您有一个对DOM元素的引用,而不是jQuery对象:
$('#mainForm div.modified').each(function (i, item) {
$.post(
$('#mainForm').attr('action')
, $(item).find(':input').serialize()
, function (data) {
$(item).removeClass('modified');
}
});
};
$('#mainForm div.modified').each(function (index, valueOfElement) {
您可以使用jQuery的$.each()
提供的"valueOfElement"参数,而不是使用this
。注意,valueOfElement是指正在迭代的集合中的当前对象/string/etc。
相关文章:
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包共享构造函数参数
- 使用Google闭包编译器包含一个Ecmascript 6类
- 从js引擎的角度来看闭包和构造函数是如何工作的
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- 子类访问父类's闭包变量
- 闭包如何具体化数据封装
- Javascript.闭包和dynamic'这'实际上具有约束力
- 构造函数函数闭包变量
- 闭包js框架-将ArrayBuffer转换为字符串
- 如何在Angularjs中重构闭包中的重复代码
- 如何告诉闭包javascript编译器不要混淆webkitAudioContext的方法名称
- Google闭包和生成的getters/ssetter
- 如何冻结函数's在闭包中的变量
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- 使变量可用于不带闭包的异步调用
- 每个和$.post的闭包