通过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格子input的id。
这种方式赋值之后,单元格是可写的。
注:
_cellVlaueChanged(cell)是报表内置的一个js函数,名字不可更改。作用是:
当单元格值发生改变时,自动触发该js方法,cell是格子的对象。