Javascript 每个和$.post的闭包

Javascript 每个和$.post的闭包,javascript,jquery,ajax,closures,Javascript,Jquery,Ajax,Closures,我有一个要编辑的项目列表 您可以使用jQuery的$.each提供的ValueOfeElement参数,而不是使用此参数。请注意,ValueOfeElement是指正在迭代的集合中的当前对象/字符串/etc。您需要使用var将项的范围限定到每次迭代 代码的问题在于没有使用闭包;item变量是全局变量,因为您没有在函数中声明它 只要改变这个: item = $(this); 致: 现在循环中的每个迭代都有自己的变量 您也可以使用发送到函数的参数,但是,您有对DOM元素的引用,而不是对jQuery

我有一个要编辑的项目列表

您可以使用jQuery的$.each提供的ValueOfeElement参数,而不是使用此参数。请注意,ValueOfeElement是指正在迭代的集合中的当前对象/字符串/etc。

您需要使用var将项的范围限定到每次迭代


代码的问题在于没有使用闭包;item变量是全局变量,因为您没有在函数中声明它

只要改变这个:

item = $(this);
致:

现在循环中的每个迭代都有自己的变量

您也可以使用发送到函数的参数,但是,您有对DOM元素的引用,而不是对jQuery对象的引用:

$('#mainForm div.modified').each(function (i, item) {
  $.post(
    $('#mainForm').attr('action')
    , $(item).find(':input').serialize()
    , function (data) {
      $(item).removeClass('modified');
    }
  });
};

您在项目声明中忘记了一个变量。我必须+1这个。我支持不要像jQuery使用迭代器那样滥用它。使用参数更好,更接近本地迭代方法的工作方式。这是最好的答案,我对此投了赞成票。当变量已经存在时,创建变量是没有意义的。作为提示,请将此字符串放在所有脚本文件/脚本标记的开头:使用较新的浏览器将在执行类似操作时显示错误,较旧的浏览器将忽略该字符串。您的第一个变量项答案是赢家:
item = $(this);
var item = $(this);
$('#mainForm div.modified').each(function (i, item) {
  $.post(
    $('#mainForm').attr('action')
    , $(item).find(':input').serialize()
    , function (data) {
      $(item).removeClass('modified');
    }
  });
};