第一栏仅在其不为空时被屏蔽

时间:2015-08-07 09:29:26

标签: javascript

我有一个网格(有handontable),但我认为我的问题只是一个Javascript问题。

在我的网格中,我有一些值,我希望第一列只在其中有值时才能读取。

这是JSfiddle,我试图这样做。

在这个例子中,我希望细胞> A2 A3 A4<阻止但是> A5<自由。 我只是找不到条件:

if (([0].indexOf(col) == 0) && myData[row][0]!='')

有人能帮助我吗?

4 个答案:

答案 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实际上是列03

您选择第一列(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;数组的长度。