Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将索引传递给jQuery_Javascript_Jquery - Fatal编程技术网

Javascript 将索引传递给jQuery

Javascript 将索引传递给jQuery,javascript,jquery,Javascript,Jquery,我正在尝试使用jQuery更新文档中的一组元素 我无法将I索引传递给$.post回调函数 这是密码 function updateValues(){ val=document.getElementsByName('valueAN'); for ( i=0; i < val.length; i++ ){ $.post('',{func:'updateAN',index:i}, (function(data,status){ val[i].valu

我正在尝试使用jQuery更新文档中的一组元素

我无法将
I
索引传递给
$.post
回调函数

这是密码

function updateValues(){
  val=document.getElementsByName('valueAN');

  for ( i=0; i < val.length; i++ ){
    $.post('',{func:'updateAN',index:i},
      (function(data,status){
        val[i].value = data;
      })(i));
   }
}
函数updateValues(){
val=document.getElementsByName('valueAN');
对于(i=0;i
$.post()的回调函数中使用
i
。在执行此回调函数时,for
循环的
已经完成,因此
i
处于上次启用的值。这是异步代码中容易混淆的问题之一

最后,这意味着在回调函数内部,您不能依赖回调函数外部的变量


您可以使用@Yukulélésuggest之类的闭包,也可以使用为每个
$.post()
回调创建自定义回调函数,但在这样做之前,请确保检查该函数。

您应该使用闭包:

function updateValues(){
  val=document.getElementsByName('valueAN');

  for ( i=0; i < val.length; i++ ){
    (function(i){
       $.post('',{func:'updateAN',index:i}, function(data,status){
        val[i].value = data;
       });
    })(i);
  }
}
函数updateValues(){
val=document.getElementsByName('valueAN');
对于(i=0;i
试试看

var val=$(“[name=valueAN]”);
函数updateValues(){
返回$.when.apply(val,$.map)(val,函数(el,键){
返回$.get(“https://gist.githubusercontent.com/guest271314/6a76aa9d2921350c9d53/raw/49fbc054731540fa68b565e398d3574fde7366e9/abc.txt"
,{func:“updateAN”}
,功能(数据、状态){
el.值=数据;
});
}));
};
updateValue()。然后(函数(){
$.each(参数、函数(键、值){
console.log(key,val)
});
$。每个(val,函数(i,el){
控制台日志(el.value)
})
});

您试图使用clousure,但却将
i
抛在了后面

如果您使用的是jQuery:
如果您使用的是纯Javascript,那么您应该遵循@Yukuléléanswer,在您的情况下,
i
将始终使用
val.length-1
的值传递给函数,并且您将使用相同的args
i
次数执行
$post
ajax调用。

您能将var放在i前面吗
for(var i=0;i
,看看这是否有效?当前的代码只是将1-8放在元素上-它忽略了服务器返回的字符串…如果您使用的是JQuery,为什么不使用
$。每个
函数都可以循环您的元素?ochi-您能告诉我如何使用它吗?
    var val = $("[name=valueAN]");

    function updateValues() {        
      return $.when.apply(val, $.map(val, function(el, i) {
        return $.post("", {"func": "updateAN", "index": i}
        , function(data, status) {
            el.value = data;
        });
      }));          
    };

    updateValues().then(function() {  
      $.each(arguments, function(key, val) {
        console.log(key, val)
      });
      $.each(val, function(i, el) {
        console.log(el.value)
      })
    });
    function updateValues(){
    $("valueAN").each(function(i) {
        $.ajax({
           type: "POST",
           url: "/",
           data: {func:'updateAN',index:i},
              success: function(data){
                  $(this).val(data);
              }
        });
    });
}