2016-07-30 48 views
0

我的網頁沒有響應,當我while循環工作頁面沒有響應時,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 
 

 
      } 
 
     });

是什麼在我的代碼的問題?

+1

'true'總是'true',因此'while'循環永遠不會結束! – Rayon

+0

而不是真的哪一個更好? – aswathy

+0

'$(「tr [data-id ='」+ parented +'']> td:first-child「)。css(」padding-left「)'return? 「while」循環是否需要返回預期結果? – guest271314

回答

0

瀏覽器在點擊按鈕後繼續執行while循環,因爲您的中斷條件未滿足。因此它變得沒有反應。

+1

瀏覽器變得沒有響應,因爲JS在單線程上運行並且運行無限循環將阻塞該線程。 – Rajesh

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是爲了調整填充。實現這一點,我的上面的建議應該修復你的循環。