GridView冻结后文本框在页面回发后内容叠加的问题解决

近期开发项目,用到了列表控件LightPowerGridView的冻结功能,但是在列表控件中如果用到了文本框会出现一个很大的问题:

页面回发后,文本框的值会逗号叠加。如:回发前 10.00,回发后就会变成10.00,10.00

经过一天多时间,问题终告解决,长吁一口气~~~

接下来,分享下问题解决过程:

1)首先怀疑是superTable冻结功能的问题,底层其实也就是调用了superTable冻结功能。

【superTable是专门进行列表控件的js框架,基本原理就是复制了一份新的列表html以便进行冻结控制】

F12调试,发现在传递给superTable的时候,html已经就是错误的了

结论:superTable冻结功能本身没问题

2)接着怀疑是底层列表控件有问题

那么我就直接在开发的页面中,手动调用superTable冻结功能,发现同样存在问题

结论:底层控件本身没问题

3)现在只能怀疑是微软的列表控件绑定本身就存在问题

验证1:修改superTable的脚本,在复制一份html的基础上,再复制一份出来,这个时候冻结绑定,回发后文本框内容变成了10.00,10.00,10.00!!!

结论:应该就是微软的列表控件GridView在绑定的时候,如果找到多个相同的控件,会导致重复赋值。

解决:

如果id不一样,应该问题就可以解决了吧?

于是在复制html的时候,将不展示出来的那部分html中的文本框id+1,

测试:问题依旧存在,那么可能是name控制的绑定吧

继续修改name+1,如下:

$(this.sFDataTable).find('input[type="text"]').each(function () { $(this).attr('name', $(this).attr('name') + 1); });

测试:文本框内容不再发生叠加,问题解决。

再次测试:页面中添加一个name相同的input text,照样会导致文本框内容叠加。

最终结论:

1、冻结效果是底层调用superTable实现的,当然也可以自己手动调用

2、superTable会复制一份列表控件的html,以便实现冻结效果

3、列表控件在回发绑定的时候,会在html中根据name找对应的控件赋值,如果有多个name相同的控件,就会重复赋值并且,分隔

发布了48 篇原创文章 · 获赞 14 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/ewqewqqwe/article/details/85132797