当while循环工作时,页面变得无法响应

时间:2016-07-30 06:18:31

标签: javascript jquery

当我的while循环工作时,我的页面没有响应



$(".hidebutton").click(function () {
            var parented = $(".selected").data("id"); 
            var currentid = parented + 1; 
            while(true)
            {
                var chiledtrleft = $("tr[data-id='" + currentid + "']> td:first-child").css("padding-left"); 
                var parentleft = $("tr[data-id='" + parented + "']> td:first-child").css("padding-left"); 
                if (chiledtrleft <= parentleft) {
                    break; 
                }
               
                $("tr[data-id='" + currentid + "']> td:first-child").hide(); 
                // do shifting here

            }
        });
&#13;
&#13;
&#13;

我的代码中有什么问题?

2 个答案:

答案 0 :(得分:2)

你的循环无限期地运行。我发现你的代码有些问题。

var chiledtrleft = $("tr[data-id='" + currentid + "']> td:first-child").css("padding-left"); 
var parentleft = $("tr[data-id='" + parented + "']> td:first-child").css("padding-left");

这些行将返回看起来像“10px”的字符串而不是像“10”那样的整数。如果要比较它们,则需要使用函数parseInt解析int。

您的代码将进行词法比较(按字母顺序排列),我怀疑这是您的if语句失败的部分原因。你可以像这样解决这个问题:

var chiledtrleft = parseInt($("tr[data-id='" + currentid + "']> td:first-child").css("padding-left"));
var parentleft = parseInt($("tr[data-id='" + parented + "']> td:first-child").css("padding-left"));

此外,你实际上并没有对循环中的填充做任何事情。如果条件评估为false,它将继续无限期地评估false。你需要做一些事情(我不确定你要完成什么)到填充。我假设评论//do shifting here是为了调整填充。实现它和我的上述建议应该可以解决你的问题。

答案 1 :(得分:0)

浏览器在您单击按钮后继续执行while循环,因为您的中断条件未得到满足。因此它变得没有回应。