日期:2014-05-16  浏览次数:20445 次

循环太多,导致脚本崩溃,寻求解决方法
需求是这样的, 做一个类似答题的一个系统,

分了十几个小模块,里面有对应的题,每个题下有三种分数(下拉选择)

类似下面那种结构  一个页面的题大概有50左右


(一)
1 :题目1

    下拉A   文本域A
    下拉B   文本域B
    下拉C   文本域C

2 :题目2

    下拉A   文本域A
    下拉B   文本域B
    下拉C   文本域C
(二)
3 :题目3

    下拉A   文本域A
    下拉B   文本域B
    下拉C   文本域C



需求是  
分别计算 所有A的得分 B的得分 C的得分
每个大题下的A的得分 B的得分 C的得分
以及 所有的文本域A的文字  B的文字   C的文字
因为自己比较懒  给所有A  B   C 统一设置了class样式   最后each中分别相加 得出了总分
然后根据 id的规则  (比如  一大题的第一小题 select_1_1 )  然后根据jquery 选择器匹配 select[id^=select_1_]   又each了一遍   其他(B和C)也是如此
规则大概是这样

跑在ff 谷歌  ie8+没什么大碍
到ie6 直接脚本无响应....


后来想想也是,,一个页面有大概40多循环  能不卡吗.
有没有其他解决办法, 不用那么麻烦的使用唯一id 的val()相加(题目50左右实在是太多了)...

------解决方案--------------------
既然IE8+都没事怎么可能因为循环多导致的IE6出事了
去看看JS哪里不兼容吧
IE8跟IE6 7 JS有兼容性问题
------解决方案--------------------
多了,能少点不?然后可以分页显示。不一定要一次显示出来。
------解决方案--------------------
40多循环  不至于吧
有个什么设备的方法 你试试
类似
for(var i=1;i<=100;i++){a[i]}
改成
for(var i=1;i<=10;i++){a[i++];.....这里总共是个a[i++]}
试试
------解决方案--------------------

试试用委托,把分类放在一个数组中,每进行一个操作就保存一个值
------解决方案--------------------
引用:
Quote: 引用:

既然IE8+都没事怎么可能因为循环多导致的IE6出事了
去看看JS哪里不兼容吧
IE8跟IE6 7 JS有兼容性问题


ie6会出现脚本崩溃的提示  问其是否继续
继续的话  是可以的   不过用户肯定等不了那么久.


如果按照你的计算方式的话

分别计算 所有A的得分 B的得分 C的得分
每个大题下的A的得分 B的得分 C的得分

试一下用数组存储每个大题下的A的得分 B的得分 C的得分
然后计算所有A的得分 B的得分 C的得分的时候用上面的数组进行求和
应该会节省一点时间
------解决方案--------------------
不命名,就用序号嘛
假定每个题目下的下拉文本对不等(你各处的都是3对)
并假定每个题目都用一个 div 包裹,且每个对象都以命名(即 name 属性存在)则有原型
a = [];
$('div').eac