控制行式填报表下拉日历是否可写
客户的行式填报报表中有单元格的编辑风格是下拉日历,并且需要控制行式填报表是否可写,在使用js控制单元格是否可写后,新添加行中的下拉日历所在单元格出现不可写的问题。
解决思路:
1. 怀疑是控制可写的javascript不正确,检查jsp,发现javascript是常用的控制下拉日历是否可写的方法;
2. 查看td的outerHTML,发现修改了onclick以后,outerHTML中就没有onclick了,问题定位;
3. 查询资料:当复制的是Element 节点时,它的所有属性都将被复制。但要注意,当前节点上注册的事件监听器函数不会被复制。
所以用js设置的事件是复制不了的,只有想法在添加新行时,对相应的单元格再用js设置事件函数;
4. 测试添加、插入行后可以重新用javascript给td重新设置onclick,因此可以重新封装添加、插入的方法。
解决问题:
1、控制下拉日历是否可写的方法:
客户往往要求能够增加、插入、删除行,润乾报表的行式填报表可以很方便的实现此需求。
行式填报表中常常有单元格的编辑风格是下拉日历,可以使用如下方式控制:
控制单元格不可写,注意,一般单元格控制不可写可写成,cellH10.writable=false;但是当单元格为下拉日历时发现此设置无效,主要是下拉日历是控件形式,所以有问题,要改成:
cellH10.onclick = _hideEditor;
这样就能控制下拉日历单元格不可写。
控制单元格可写,同上,如果使用常规形式:cellH10.writable=true;同样是有问题,如果是下拉日历单元格,要用下述方式:
cellH10.onclick = function anonymous() {//设置下拉日历单元格可写方法
_hideEditor();
_runqianCalendar.dateFormat=’yyyy-MM-dd’; //设置下拉日历取值类型
_runqianCalendar.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即可解决控制行式填报表添加、插入行后下拉日历是否可写问题。