2014-08-28 72 views
0

使用此函数可以很好地返回网格的列名。拼接它返回的数组时会出现问题。jqGrid('getGridParam','colNames')奇怪的行为

网格包含一个复选框作为第一列,所以我想从数组中删除它。这是代码。

var columnTitles = $(table).getGridParam('colNames'); 
columnTitles.splice(0,1); 

问题出现在我多次使用这个函数时(它导出到excel)。下一次导出时,getGridParam函数实际上会返回拼接的列名称数组而非实际的列名称。就好像它是通过引用或其他方式传递的。

进一步证明了它这样做,我不只是有一个全局变量什么问题...如果我做了下面的代码:

var columnTitles = $(table).getGridParam('colNames'); 
var columnTitles2 = $(table).getGridParam('colNames'); 
columnTitles.splice(0,1); 
console.log(columnTitles2); 

columnTitles2值回来作为拼接阵列。这可能是完全愚蠢的事情,但我在这里错过了什么?

+0

你拼接'columnTitles'而不是'columnTitles2'。 – 2014-08-28 22:16:26

+0

我知道,这就是要点。即使我拼接列标题2也回来拼接。 它看起来像奥列格证实了我的怀疑,它通过引用传递,这只是出于某种原因令我惊讶。 – mrshickadance 2014-08-29 12:47:50

回答

1

方法getGridParam返回jqGrid使用的内部参数的参考。例如,如果您使用阵列或对象,则应该小心,例如colNamescolNames。它需要修改阵列你的目的,但你不想改变的jqGrid应首先使复制阵列值,然后修改副本:

var columnTitles = $(table).jqGrid("getGridParam", "colNames").slice(); 
columnTitles.splice(0,1); 

我用slice以制作jqGrid使用的内部colNames的副本。

+0

谢谢,我试图检查它是否通过引用传递,但没有找到任何东西,并没有预料到它会出于任何原因。 谢谢slice()选项。 – mrshickadance 2014-08-29 12:55:45

+0

@mrshickadance:不客气! – Oleg 2014-08-29 14:13:10