2016-04-07 10 views
1

Hallo stackoverflow Gemeinschaft. Ich brauche Hilfe mit "zu viel Rekursion" -Fehler. Es kommt, wenn ich diese Funktionen tun, seltsam, aber alles funktioniert nur Fehler .:zu viel Rekursionsfehler in Baum

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); 
     } 
    }); 
}); 

Wenn Prüfung angeklickt wird, wenn ul hat ul es alle checkbox'es prüft. Maby check_checker endet nie oder so? Was denkt ihr?

+1

'if ($ (Geschwister) .children ('ul')) {' wird immer 'true' als jQuery-Selektoren immer ein Objekt zurückgeben, die auf true nötigt. Verwenden Sie 'if ($ (Geschwister) .children ('ul'). Länge) {' –

+0

@RoryMcCrossan ES BEARBEITET !! Schreibe auf Antworten :) – Sidas

Antwort

1

Ja, das hört nie auf. $(siblings).children('ul') wird ein Objekt zurückgeben, das truthy ist, also wird es immer wahr sein. Ich würde empfehlen, stattdessen die Eigenschaft length zu verwenden.

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); 
      }           
     } 
    } 
}