背景:
由于项目中有很多的下拉控件,日期控件,树形控件,多选控件等,在论坛中发现解决方案都是对每一个控件进行单独的事件绑定,如果存在太多这样的控件
每次都设置的话会导致很多重复的工作,so 我们需要一次对所有这样的控件进行一次绑定即可:
实现原理:
在表单初始化完成后,进行参数绑定事件
eg:
事件如下:
由于本项目的集成是用ifream集成,因此调用的是父窗口的函数
window.parent.initParam(this);
如果不用ifream 可以自定义js文件,然后引入到当前的报表页面:
推荐:把js引入到当前的报表页面,原因:可能当前的报表以后会被其他的报表引用,这样就会出现找不到window.parent.initParam 函数的形式
initParam 函数如下:
//自定义初始化控件后点击文本框会弹出对应的显示框
function initParam(obj){
$.each(obj.options.form.name_widgets,function(i,item){
//如果是标签控件不做处理,如果是时间类型,下拉类型,多选框,树形结构就设置点击当前的文本框事件
if (item.options.type !=='label' && (item.options.type==='combo' || item.options.type==='datetime' || item.options.type === 'tagcombocheckbox'|| item.options.type === 'treecombobox')) {
//设置点击事件
var self = item;
self.options.name4Empty = "全部选择" ;//下拉框替换默认的 不选
$('input',item.element).click(function(){
if(self.$view.css('display')=='none'){
self.onTriggerClick();
}
});
}
});
}
对于表单页面还需要设置body加载完成后的事件,因为body中也可能有下拉框等这样的控件
表单页面的组成部分:
选中后选择事件
然后把上面的js放进去即可。
最后效果:
编辑于 2017-9-15 16:54
编辑于 2017-9-15 16:55
|