我有个功能是下拉列表值改变的时候,去查出所选值的下级信息,类似级联显示的功能,
onchange事件是一个ajax请求struts2的action,选了之后会卡一阵子才会给这个<select>赋值,
这是为什么呢?是不是险执行了onchange事件之后才给<select>赋所选择的项呢?在线求答疑!

解决方案 »

  1.   

    这个是不是你的要求有点高了啊,csdn都可以卡好久的...
      

  2.   

    本帖最后由 showbo 于 2013-07-08 09:52:57 编辑
      

  3.   

    把你的 onchange里面的代码 放在  setTimeout里面
      

  4.   

    把你的 onchange里面的代码 放在  setTimeout里面浏览器会在执行完onchange的js后再更新dom节点,如果你发现select会卡一下,估计是你的onchange的js执行时间太长,可以从两方面去考虑问题所在:
    1.你的ajax请求是否设为同步了?如果同步的话请改成异步。
    2.你在ajax请求前是否做了其他比较重载的js操作,如果有请考虑如何提高这个操作的性能。
    如果这两方面你确认都无法改进,把你的onchange的代码放到setTimeout里,能够满足你立刻先把值赋给下拉框的需求,如<select name="sel" onchange=setTimeout(runLongOperation,20);>
       <option value="1">One</option>
       <option value="2">Two</option>
    </select>
      

  5.   

    呵呵,楼上几位几乎把可能性都指出来了。LZ自己检查一下吧。以我估计,ajax被设置为了同步的可能性偏大些。一个联动所请求的数据量,应该不至于大到服务器处理延迟的程度,否则那服务器得垃圾成啥样呀,LZ也不大可能买吧
      

  6.   

    把你的 onchange里面的代码 放在  setTimeout里面浏览器会在执行完onchange的js后再更新dom节点,如果你发现select会卡一下,估计是你的onchange的js执行时间太长,可以从两方面去考虑问题所在:
    1.你的ajax请求是否设为同步了?如果同步的话请改成异步。
    2.你在ajax请求前是否做了其他比较重载的js操作,如果有请考虑如何提高这个操作的性能。
    如果这两方面你确认都无法改进,把你的onchange的代码放到setTimeout里,能够满足你立刻先把值赋给下拉框的需求,如<select name="sel" onchange=setTimeout(runLongOperation,20);>
       <option value="1">One</option>
       <option value="2">Two</option>
    </select>
    是的,已经处理过来了,是因为设置了同步的原因