转载EasyUI之Form load函数IE8下设置Radio或Checkbox的BUG – 雪雁 – 博客园.
EasyUI的form的load函数很好用,表单赋值就靠它了,简单方便。我们可以指定url以Ajax加载,如:
1: $('#ff').form('load', 'ajax/common')
JSON如下:
也可以指定json,比如:
$( 'form' ).form( 'load' , { "初审申请日期" : "2013-05-30" , "伦理委员会受理编号" : "123234" , "是否否决过" : "是" , "是否终止过" : "是" , "主要研究者姓名" : "37" , "主要研究者单位" : "123" , "主要研究者科室" : "上海市XXXXXXXX医院" , "主要研究者联系电话" : "123" , "主要研究者联系传真" : "123" , "主要研究者联系Email" : "123" , "主要研究者指定联系人姓名" : "123" , "主要研究者指定联系人电话" : "123" , "主要研究者指定联系人Email" : "123" , "专业负责人" : "34" , "研究方案名称" : "123123123" , "研究方案编号" : "123123123" , "申办者名称" : "123123123" , "申办者地址" : "123123123" , "申办者联系人" : "123123123" , "申办者电话" : "1231231231" , "临床监查员姓名" : "1232312312" , "临床监查员电话" : "12312313" , "本中心招募受试者人数" : "12313123" , "总人数" : "123123123" , "预期试验期限开始" : "2013-06-15" , "预期试验期限结束" : "2013-06-25" , "试验用品" : "药物" , "产品名称" : "werqre" , "药物分类" : "种类一" , "医疗器械分类" : "种类一" , "试剂分类" : "种类一" , "使用方式" : "创伤性" , "多中心试验" : "是" , "研究形式" : "第一期" , "研究形式观察" : "观察" , "研究对象" : "正常人" , "年龄范围18-44" : "18-44" , "儿童年龄小于1" : "小于1" , "弱势群体孕妇胎儿" : "孕妇胎儿" , "弱势群体文盲" : "文盲" , "要求排除对象女性" : "女性" , "要求排除对象其他补充" : "" , "特殊条件隔离区" : "隔离区" , "特殊条件管制药品" : "管制药品" , "特殊条件器官移植备注" : "" , "特殊条件其他备注" : "" , "利益冲突声明" : "123123" }); |
不过需要注意一点的是,其是根据控件的name属性来匹配的。
最近在使用EasyUI时,发现表单上如果使用radio时,在IE8会加载出错,错误如下:
“in”的操作数无效: 缺少 Object
对于这种问题,只能见招拆招了。首先分析JQuery.easyui.min.js,很快就可以发现,判断代码在这里:
1: function _3fa(name,val){
2: var rr=$(_3f7).find("input[name=\""+name+"\"][type=radio], input[name=\""+name+"\"][type=checkbox]");
3: rr._propAttr("checked",false);
4: rr.each(function(){
5: var f=$(this);
6: if(f.val()==String(val)||$.inArray(f.val(),val)>=0){
7: f._propAttr("checked",true);
8: }
9: });
10: return rr;
11: };
因为是IE8有问题,那么可以在rr上设置一个断点,并且设置一个条件,比如:
这个条件值是radio的name。
跟踪下来就会发现,bug在这里:
1: if(f.val()==String(val)||$.inArray(f.val(),val)>=0){
2: f._propAttr("checked",true);
3: }
在调试窗口输入就会发现:
看来这还是JQuery的bug,不过不能算bug吧,所谓拉屎不出不能怪坑太小,开发者不判断,不能怪别人,于是bug很好解决了:
1: function _3fa(name,val){
2: var rr=$(_3f7).find("input[name=\""+name+"\"][type=radio], input[name=\""+name+"\"][type=checkbox]");
3: rr._propAttr("checked",false);
4: rr.each(function(){
5: var f=$(this);
6: if(f.val()==String(val)|| ($.isArray(val) && $.inArray(f.val(),val)>=0)){
7: f._propAttr("checked",true);
8: }
9: });
10: return rr;
11: };
所以有bug不要怕,只要有办法找到原因就好(开发人员工具一定要用好,但不要盲目下手)。希望EasyUI的下一个版本能够解决该问题。