控制行式填报表下拉日历是否可写

原始问题:

客户的行式填报报表中有单元格的编辑风格是下拉日历,并且需要控制行式填报表是否可写,在使用js控制单元格是否可写后,新添加行中的下拉日历所在单元格出现不可写的问题。

解决思路:

1. 怀疑是控制可写的javascript不正确,检查jsp,发现javascript是常用的控制下拉日历是否可写的方法;

2. 查看tdouterHTML,发现修改了onclick以后,outerHTML中就没有onclick了,问题定位;

3. 查询资料:当复制的是Element 节点时,它的所有属性都将被复制。但要注意,当前节点上注册的事件监听器函数不会被复制。

所以用js设置的事件是复制不了的,只有想法在添加新行时,对相应的单元格再用js设置事件函数;

4. 测试添加、插入行后可以重新用javascripttd重新设置onclick,因此可以重新封装添加、插入的方法。

解决问题

1、控制下拉日历是否可写的方法:

客户往往要求能够增加、插入、删除行,集智数据平台的行式填报表可以很方便的实现此需求。

行式填报表中常常有单元格的编辑风格是下拉日历,可以使用如下方式控制:

控制单元格不可写,注意,一般单元格控制不可写可写成,cellH10.writable=false;但是当单元格为下拉日历时发现此设置无效,主要是下拉日历是控件形式,所以有问题,要改成:

cellH10.onclick = _hideEditor;

这样就能控制下拉日历单元格不可写。

控制单元格可写,同上,如果使用常规形式:cellH10.writable=true;同样是有问题,如果是下拉日历单元格,要用下述方式:

cellH10.onclick = function anonymous() {//设置下拉日历单元格可写方法

_hideEditor();

_geeznCalendar.dateFormat=’yyyy-MM-dd’; //设置下拉日历取值类型

_geeznCalendar.type= ‘date’; //请注意此处的写法

_showCalendar();

_setRowColBackColor(this) };

这样就可以控制单元格可写,并且是下拉日历形式。

2、重新封装添加、插入的javascript

function tianjia1(){

_appendRow( report1 );

var D4_val = document.getElementById(“report1_D4″).value;

var D12_val = document.getElementById(“report1_D12″).value;

var tds = report1.currCell.parentNode.getElementsByTagName(‘td’);//获取光标所在行的所有td

var tdsl = tds.length;//看看有多少个td,以便找到有日历的行,有日历的行的td总数为7

var RL = tds[5];//找到日历所在的td

if((D12_val==1||D4_val==1)&&tdsl==7){

RL.onclick=anonymous;

}

};

function charu1(){

_insertRow( report1 );

var D4_val = document.getElementById(“report1_D4″).value;

var D12_val = document.getElementById(“report1_D12″).value;

var tds = report1.currCell.parentNode.getElementsByTagName(‘td’);

var tdsl = tds.length;

var RL = tds[5];

if((D12_val==1||D4_val==1)&&tdsl==7){

RL.onclick=anonymous;

}

};

使用上述的添加、插入行的javascript即可解决控制行式填报表添加、插入行后下拉日历是否可写问题。