一个在循环里面赋值的问题(jquery easyui)

xietingyan 2016-10-18 10:08:06
我使用了easyui的datagrid,其中有个需求就是要去动态的生成表头,大概代码简化如下,现在的问题就是每次的formatter函数运行后返回的i都是0,而不是想要的比如每个列分别为0,1,2,3. 看到网上的说法要用闭包去解决,但是还是不怎么会写,在这里请教了,谢谢大家
var ajaxData = [{"none":1},{"none":2},{"none":2},{"none":2}];
$.each(ajaxData, function(i, one){
row2.push({title:"评价",width:150,field:"none",formatter:function(value,row,index){
return i;
}
});
});
...全文
335 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xietingyan 2016-10-18
  • 打赏
  • 举报
回复
引用 10 楼 qq_29594393 的回复:
[quote=引用 9 楼 Free_Wind22 的回复:] 我测试的是空的.
我测试明明正常显示0,1,2[/quote]你这个是有效但是没有意义....要解决的是formatter函数运行时的参数如何绑定
当作看不见 2016-10-18
  • 打赏
  • 举报
回复
引用 9 楼 Free_Wind22 的回复:
我测试的是空的.
我测试明明正常显示0,1,2
2016-10-18
  • 打赏
  • 举报
回复
引用 7 楼 qq_29594393 的回复:
[quote=引用 4 楼 qq_29594393 的回复:]

 $.each( ajaxJsonData , function(i, one){       
               row1.push( {title:one.name,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none",formatter:i
               }); 
       });
不试一下吗,测试有效的[/quote] 我测试的是空的.
2016-10-18
  • 打赏
  • 举报
回复
数据传不进去,应该是调用的时候没用原来的作用域,还是用row循环比较ajaxJsonData吧.

$.each( ajaxJsonData , function(i, one){       
               row1.push( {title:one.name + i,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none",formatter:(function(index){
						console.log(index); //0,1,2
						return function(){
							return index; //0
						}
					})(i)
               }); 
       });
当作看不见 2016-10-18
  • 打赏
  • 举报
回复
引用 4 楼 qq_29594393 的回复:

 $.each( ajaxJsonData , function(i, one){       
               row1.push( {title:one.name,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none",formatter:i
               }); 
       });
不试一下吗,测试有效的
xietingyan 2016-10-18
  • 打赏
  • 举报
回复
引用 5 楼 Free_Wind22 的回复:

$.each( ajaxJsonData , function(i, one){       
               row1.push( {title:one.name,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none",formatter:function(value, row, index){ 
						return index;
                    }
               }); 
       });
formatter自带了一个参数index
这个index是行的index,意思是我的数据当前是第几行,而我这个i相当于列的index,想要知道是第几列数据
2016-10-18
  • 打赏
  • 举报
回复

$.each( ajaxJsonData , function(i, one){       
               row1.push( {title:one.name,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none",formatter:function(value, row, index){ 
						return index;
                    }
               }); 
       });
formatter自带了一个参数index
当作看不见 2016-10-18
  • 打赏
  • 举报
回复

 $.each( ajaxJsonData , function(i, one){       
               row1.push( {title:one.name,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none",formatter:i
               }); 
       });
xietingyan 2016-10-18
  • 打赏
  • 举报
回复
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>demo</title>  
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.min.js"></script>
    <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>


<script type="text/javascript">

var ajaxJsonData = [
    {"columnName":"第一项","name":"小明",},
    {"columnName":"第二项","name":"小王",},
    {"columnName":"第三项","name":"小红",},
]

$(function(){
  TableInit.init();
    
});

var TableInit = {
    init: function(){
       $("#tg").datagrid({
    		columns: TableInit._getColumns(),
    		data: ajaxJsonData
        }); 
    },
    _getColumns: function(){
       var row1 = new Array(),row2 = new Array();
       row1.push( {title:'项目',field:'columnName',width:150,rowspan:2} );
       $.each( ajaxJsonData , function(i, one){       
               row1.push( {title:one.name,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none",formatter:function(value){ 
                        return i;//现在就是每一个都是0,而不是想要的0,1,2这种   
                    }         
               }); 
       });
        return [row1, row2]; 
    }
    
}


</script>
</head>
<body >      
     <table id="tg" style="width:100%">
                        
     </table>

</html>
xietingyan 2016-10-18
  • 打赏
  • 举报
回复
引用 1 楼 Free_Wind22 的回复:

$.each(ajaxData, function(i, one){
	(function(i){
		row2.push({title:"评价",width:150,field:"none",formatter:function(value,row,index){ 
				return i;
			}
		});
	})(i);
});
谢谢,可是还是没有用,我把我所有代码整理出来给你看看吧,太感谢了
2016-10-18
  • 打赏
  • 举报
回复

$.each(ajaxData, function(i, one){
	(function(i){
		row2.push({title:"评价",width:150,field:"none",formatter:function(value,row,index){ 
				return i;
			}
		});
	})(i);
});
xietingyan 2016-10-18
  • 打赏
  • 举报
回复
引用 12 楼 showbo 的回复:
field要配置不一样的,改成下年这样就行了,formatter没有问题 row2.push({ title: "满意度评价", width: 150, field: "none"+i, formatter: function (value, row, index) { return i;//现在就是每一个都是0,而不是想要的0,1,2这种 } }); easyui获取formatter是通过遍历columns对比filed来得到的,一样了只能得到第一个filed的formatter,所以只返回了0,而不是后续的1,2,配置不一样的field就行了
 $.each( ajaxJsonData , function(i, one){   
             row1.push( {title:one.name,width:100,colspan:1} );
               row2.push({title:"满意度评价",width:150,field:"none"+i,formatter:function(value){ 
                         var i = this.field.replace("none","");
                        return i;//现在就是每一个都是0,而不是想要的0,1,2这种   
                    }         
               });        
       });
谢谢各位虽然不怎么优雅,但是反正能工作管他呢。。。
  • 打赏
  • 举报
回复
field要配置不一样的,改成下年这样就行了,formatter没有问题
row2.push({
title: "满意度评价", width: 150, field: "none"+i, formatter: function (value, row, index) {
return i;//现在就是每一个都是0,而不是想要的0,1,2这种
}
});

easyui获取formatter是通过遍历columns对比filed来得到的,一样了只能得到第一个filed的formatter,所以只返回了0,而不是后续的1,2,配置不一样的field就行了

easyui datagrid field配置一样formatter无效解决办法

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧