2016-04-07 85 views
1

你好,stackoverflow社區。我需要幫助「太多遞歸」錯誤。這是當我做這些功能的,怪異的,但一切工作正常,只是錯誤:樹中遞歸錯誤太多

function check_checker (siblings, status) { 
    if (siblings) { 
     if (status == true) { 
      $(siblings).children('li.imCheckbox').children('input').prop("checked", true); 
      if ($(siblings).children('ul')) { 
       check_checker($(siblings).children('ul'), true); 
      }           
     } else { 
      $(siblings).children('li.imCheckbox').children('input').prop("checked", false); 
      if ($(siblings).children('ul')) { 
       check_checker($(siblings).children('ul'), false); 
      }           
     } 
    } 
} 
$(document).ready(function(){ 
    $('body').on('click', 'input[name=impTaskCh]', function(){ 
     if ($(this).is(':checked')) { 
      var siblingas = $(this).parent().siblings('ul'); 
      check_checker(siblingas, true); 
     } else { 
      var siblingas = $(this).parent().siblings('ul'); 
      check_checker(siblingas, false); 
     } 
    }); 
}); 

當點擊檢查,如果有UL UL它會檢查所有checkbox'es。馬比check_checker永遠不會結束或者什麼?你們怎麼想?

+1

'if($(siblings).children('ul')){'將始終爲'true',因爲jQuery選擇器總是返回一個強制爲真的對象。使用'if($(siblings).children('ul')。length){'而不是 –

+0

@RoryMcCrossan它工作!寫回答:) – Sidas

回答

1

是的,這是永無止境的。 $(siblings).children('ul')將返回一個對象,這是一個真理,所以它將永遠是真實的。我會建議使用長度屬性來代替。

function check_checker (siblings, status) { 
    if (siblings) { 
     if (status == true) { 
      $(siblings).children('li.imCheckbox').children('input').prop("checked", true); 
      if ($(siblings).children('ul').length > 0) { 
       check_checker($(siblings).children('ul'), true); 
      }           
     } else { 
      $(siblings).children('li.imCheckbox').children('input').prop("checked", false); 
      if ($(siblings).children('ul').length > 0) { 
       check_checker($(siblings).children('ul'), false); 
      }           
     } 
    } 
}