javascript - while 循环工作时页面变得无响应

标签 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

            }
        });

我的代码有什么问题?

最佳答案

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

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。你需要对填充做一些事情(我不确定你想要完成什么)。我假设注释 //doshiftinghere 是为了调整填充。实现该建议和我的上述建议应该可以修复您的循环。

关于javascript - while 循环工作时页面变得无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670964/

相关文章:

jquery - 更改元素的 :after property in jQuery

javascript - 当鼠标悬停在另一张图片上时,如何让图片滑过另一张图片?

javascript - 使用 Javascript 验证 "Confirm password"输入是否会增加任何安全风险?

jquery - 使用jquery hasClass方法时如何获取div的id?

javascript - React : Deep requiring is deprecated as of uuid, 请要求顶级模块

javascript - SimpleModal 在对话框中加载外部 HTML 页面

javascript - 我无法使用 jquery 使跨度可编辑

javascript - 为什么我的侧面导航菜单不会用这个 jquery 幻灯片效果隐藏?

javascript - 层叠组合框 HTML

javascript - 仅当站点位于本地主机时、仅当启用 JavaScript 时、仅在 IE8 模式下,IE8 才会在重新加载时崩溃