通过js给参数模版的单元格赋值误区

在很多时候由于业务需求,需要对参数模版中选择的值进行一些操作之后,回填给单元格,然后再进行查询

一般通过js给单元格赋值的语句是:

Document.getElementById(“report1_A1”).value = xx;

Document.getElementById(“report1_A1”).innerText = xx;

那么,有时候我们会想当然的认,给参数模版的格子赋值也是这样。

而我通过实际测试得出的结果却不是这样。

下面举例说明一下:

设计一张带参数模版的报表,参数名为arg1,参数模版中为下拉日历:

参数模版:

其中B1的日历格式为:年月日时分秒。

然后,在JSP中定义一个名为_cellValueChanged(cell)js方法,作用是:

当用户选择一个日期之后,截取年月,然后回填到格子里面去。

具体语法如下:

function _cellValueChanged(cell){

var cellvalue = cell.value;

var cellvalue1=cellvalue.substr(0,7);

document.getElementById(“form1_B1″).value = cellvalue1;

document.getElementById(“form1_B1″).innerText = cellvalue1;

}

当我在页面选择一个日期之后,能截取年月,并回填到格子里面来,但是B1就无法再次编辑了。也就是说日期只能选择一次。

后来经过检查页面源码发现:

这个B1生成了一个Input属性,并且有相应的name,id,emptyIsNull等属性,这个input属性才是控制该格子是否可写的关键,而非form1_B1(也就是td)

 

若直接对form1_B1赋值,那么就会将input属性设置没了,格子自然也就不可写了。

 

正确的赋值方式:

document.getElementById(“arg1″).value = cellvalue1;

document.getElementById(“arg1″).innerText = cellvalue1;

此处的arg1就是页面源码中B1格子inputid

这种方式赋值之后,单元格是可写的。

 

注:

_cellVlaueChanged(cell)是报表内置的一个js函数,名字不可更改。作用是:

当单元格值发生改变时,自动触发该js方法,cell是格子的对象。