我有一个网格(有handontable),但我认为我的问题只是一个Javascript问题。
在我的网格中,我有一些值,我希望第一列只在其中有值时才能读取。
这是JSfiddle,我试图这样做。
在这个例子中,我希望细胞> A2 A3 A4<阻止但是> A5<自由。 我只是找不到条件:
if (([0].indexOf(col) == 0) && myData[row][0]!='')
有人能帮助我吗?
答案 0 :(得分:4)
可编辑的原因是您检查了!= ''
。此检查会返回true
,因为该列的值为undefined
。
如果您将陈述更改为:
if (([0].indexOf(col) == 0) && myData[row][0])
它检查存在的值。
这允许它只被编辑一次,然后在编辑一个值之后,它会锁定该字段。之所以会发生这种情况,是因为每次都会对单元格进行全部评估,并且在填入值后,条件不再评估为emptycell
答案 1 :(得分:1)
这就是你要找的东西:
if(([0].indexOf(col) == 0) && myData[row][0]!=null)
你假设空单元格是空字符串是错误的;如果您查看行元素(fiddle)的值,您会注意到初始值为null
答案 2 :(得分:0)
答案是使用row
值:&& (row >= 1 && row < 4)
请记住,JavaScript使用零基索引。因此,单元格A4实际上是列0
行3
。
您选择第一列(0
),然后使用行值来阻止所需的单元格。
http://jsfiddle.net/hU6Kz/3822/
在这个解决方案中我更进一步:
http://jsfiddle.net/hU6Kz/3826/
通过使用对象(在本例中为global var),您可以设置要禁用的单元格。由于细胞功能遍历每个细胞。
var disabledCells = {0 : {1 : true, 2 : true, 3 : true}, 1 : {3:true}};
这是对象。属性引用列和单元格。当0,1为真时,它将禁用A0
。
此功能附带:
function returnReadOnlyCells(row, col)
{
if(disabledCells[col] && disabledCells[col][row] ) //Here I'm trying to block the cells I want
{
return {readOnly : true};
}
else
{
return {};
}
}
答案 3 :(得分:0)
使用:强>
if(([0].indexOf(col) == 0) && (row >= 1 && row < myData.length -1) )
通过检查myData数组的长度来限制它。因此,您可以修改所有行&gt;数组的长度。