循环太多,导致脚本崩溃,寻求解决方法

减肥啊啊啊啊啊 2013-11-25 03:37:53
需求是这样的, 做一个类似答题的一个系统,

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

类似下面那种结构 一个页面的题大概有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左右实在是太多了)...
...全文
515 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我仔细看了看代码 其实主要问题是出现在 计算每个大题下的 所有小题加一起的分数 这块使用的each循环很多.
zhjdg 2013-11-25
  • 打赏
  • 举报
回复
认真看了看。 本来就不该这么做的。 你不会这样设几个变量。 T1= [[],[],[]], T2 = [[],[],[]], 根据事件(如click)把值push进去。
zhjdg 2013-11-25
  • 打赏
  • 举报
回复
只能想象你的好代码,你问问如来吧。
xuzuning 2013-11-25
  • 打赏
  • 举报
回复
不命名,就用序号嘛 假定每个题目下的下拉文本对不等(你各处的都是3对) 并假定每个题目都用一个 div 包裹,且每个对象都以命名(即 name 属性存在)则有原型
a = [];
$('div').each(function() {
  $(this).find('[name]').each(function(i){
    a[i] += $(this).val();
  });
});
数组 a 就是按对象次序的结果(偶数下标为 select 的值,奇数下标为 text 的) 也可以分别取出 总之只需遍历一遍
  • 打赏
  • 举报
回复
引用 2 楼 sd4000784 的回复:
[quote=引用 1 楼 no200830740203 的回复:] 既然IE8+都没事怎么可能因为循环多导致的IE6出事了 去看看JS哪里不兼容吧 IE8跟IE6 7 JS有兼容性问题
ie6会出现脚本崩溃的提示 问其是否继续 继续的话 是可以的 不过用户肯定等不了那么久.[/quote] 如果按照你的计算方式的话 分别计算 所有A的得分 B的得分 C的得分 每个大题下的A的得分 B的得分 C的得分 试一下用数组存储每个大题下的A的得分 B的得分 C的得分 然后计算所有A的得分 B的得分 C的得分的时候用上面的数组进行求和 应该会节省一点时间
momoxsy 2013-11-25
  • 打赏
  • 举报
回复
试试用委托,把分类放在一个数组中,每进行一个操作就保存一个值
  • 打赏
  • 举报
回复
引用 4 楼 zzgzzg00 的回复:
40多循环 不至于吧 有个什么设备的方法 你试试 类似 for(var i=1;i<=100;i++){a[i]} 改成 for(var i=1;i<=10;i++){a[i++];.....这里总共是个a[i++]} 试试
每个大题里的总分也要计算 比如一个页面有11个大题.. 我那写法
$("select[id^=select_1_]").each(function(i){
     小模块总分 +=  $(this).val() 
});
然后写了11个... A B C 有三套 所有 这就大概有33个循环了...
似梦飞花 2013-11-25
  • 打赏
  • 举报
回复
i<=100上个写错了
  • 打赏
  • 举报
回复
引用 3 楼 ly12530 的回复:
多了,能少点不?然后可以分页显示。不一定要一次显示出来。
分页的话 后台就该麻烦了... 可以不用循环, 然后一个一个去id取value相加.. 可惜实在太麻烦
似梦飞花 2013-11-25
  • 打赏
  • 举报
回复
40多循环 不至于吧 有个什么设备的方法 你试试 类似 for(var i=1;i<=100;i++){a[i]} 改成 for(var i=1;i<=10;i++){a[i++];.....这里总共是个a[i++]} 试试
Null_Reference 2013-11-25
  • 打赏
  • 举报
回复
多了,能少点不?然后可以分页显示。不一定要一次显示出来。
  • 打赏
  • 举报
回复
引用 1 楼 no200830740203 的回复:
既然IE8+都没事怎么可能因为循环多导致的IE6出事了 去看看JS哪里不兼容吧 IE8跟IE6 7 JS有兼容性问题
ie6会出现脚本崩溃的提示 问其是否继续 继续的话 是可以的 不过用户肯定等不了那么久.
  • 打赏
  • 举报
回复
既然IE8+都没事怎么可能因为循环多导致的IE6出事了 去看看JS哪里不兼容吧 IE8跟IE6 7 JS有兼容性问题

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧