ajax-dwr框架读取后台数据集显示到页面表格的下拉框,文本框中,结果下拉框会闪动因为业务需求,需要将list的数据循环的放到下拉框和文本框中,所以页面表格会有很多下拉框和文本框,我是用dom方式,document.createElement("<select>");的方式动态创建下拉框和选项,然后页面要定时局部刷新,我使用dwr.util.removeAllRows();方式清除原来表格内容,所以每次刷新都是先清除,然后动态创建 ,结果发现,下拉框每次定时局部刷新会闪动一下,而文本框就不会闪动于是我尝试使用 innerHTML 方式在div中动态生成select和option 结果还是闪动,我想 是不是显示原理有问题,比如:我是每次刷新都是 先清除表格,然后动态创建,这个过程本来就会让下拉框闪,有人建议我不要清除表格里的内容,但是每次刷新都会产生一个表格数据,最后我想到,如何在不清除表格的情况下,清除下拉框和文本框的数据  达到不闪动,目前尚不知道,因为我的下拉框是根据数据库的数据条数动态生成的,不是写死的,有多少数据就创建多少下拉框,我要替换数据就必须得到上次的元素,这显然我不知道,如果你有好的建议,请不吝赐教,共同学习学习

解决方案 »

  1.   

    建议:
    <select>不用没回都清除在创建的...
    只需要刷新<option>即可...我的办法就是....先获取原来的list.size();存起来...
    当list.size发生改变的时候...刷新<option>如果list.size没有改变...则不需要刷新<option>好处你应该可以想明白的...具体实现起来也不是很难..多动动脑就可以了...
      

  2.   

    那么我每次在定时局部刷新,将list集合的数据显示到表格的下拉框中,是不是先移除原来表格中的内容,然后再创建,添加选项  这种刷新模式  是不是有问题
      

  3.   

    异步改成同步的就OK了 dwr.engine.setAsync(false);  
      

  4.   

    自己写撒,取到数据后,第一次在页面上创建了需要的元素后,就将该元素对象存起来,比如第一次创建的select, input等.下次再刷新的时候就将取到的后台数据进行解析,然后一一给元素重新赋值,这时候,对于select元素来说,对比新数据的长度和现有的options的长度,有多的就创建新的option,少了就删除一部分option,然后重新给options赋值,就不会出现你说的问题了。而且,这样也可以免去了大量反复创建页面元素的问题
      

  5.   

    danica7773 你的说法我考虑过,我想如果每次删除然后又创建,重复做了廉价劳动,可以只创建一次,然后替换里面的数据,但是创建好了,如何保存呢,从显示dwr取道list集合  到 页面显示到表格的下拉框  有没有完整的思路  提示一下下
      

  6.   

    JS框架只用过prototype.dwr还从来没见过,所以要在它的基础上说个所以然来
      

  7.   

    搞定了,我的思路开始就错误,本来是创建一次,下次就是替换数据,而我开始的想法是创建,刷新就是先删除然后又创建现在我根据 danica7773 提供的思路, 就是在加载时创建一次,刷新后判断div中是否有innerHTML,有的话表示 不是第一次加载,就用document.getElementById();的方式获得下拉框对象,然后替换它的选项;如果div没有东西,就用document.createElement("<select>"); 的方式创建下拉框   果然页面上的下拉框不闪动了,也节省了很多资源,不用每次刷新都创建表单元素  结贴  
    多谢danica7773