简单的jquery每个循环使浏览器挂起

simple jquery each loop making browser hang

本文关键字:浏览器 挂起 循环 jquery 简单      更新时间:2023-09-26

所以我调用jquery的一个函数,在一个表上循环,并确定是否隐藏一行基于隐藏的表单元素在每一行。

当我运行这个脚本时,无论以哪种方式切换行,即使少于100行,浏览器也会挂起至少5秒。

js是这样的:

$('input.vv').each(function(index) {
        var chk = $(this).val();
        if (chk == "0") $(this).parents("tr").slideToggle(function() {
          tableRows();
        });
      });

和HTML中的样例行如下所示:

 <tr class="sortable part item" id="row803">
 <td class="col-check">Interior Fixed Dome Camera Surface Mounted<br />(Panasonic Part No. WV-CW484AS/29)
 <input type="hidden" class="vv" value="50" id="v803" /></td>
  <td class="col-equip cen" id="q803">70</td>
      <td class="col-equip cen" id="s803">50</td>
  <td class="col-equip cen"><div id="bom803|092311-001|15"  />50</div></td>
  <td class="col-equip cen" id="b803"><span class="shipped">20</span></td>
</tr>

firebug引用的jquery.js行是8449

return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;

我卡住了(不能链接到现场,抱歉)。Firebug可能会给我一个出路,但我不确定如何使用它足够好。的想法吗?谢谢!

$('input.vv')创建一个遍历所有输入元素的循环,并检查它们是否属于vv类。

.parents("tr")遍历所有父节点,只选择<tr>元素。

然后,调用.slideToggle,它创建的效果需要大量的计算能力(在小的间隔,通过JQuery调整CSS样式,通过浏览器解析CSS样式)。可能是主要原因

最后,你调用tableRows();,你还没有定义。

试着更具体一点:

$('input.vv').each(function(index) {
    if ($(this).value == "0") $(this).parent().parent().slideToggle(function() {
      tableRows();
    });
  });