2017-10-06 1 views
0

Ich erhalte FehlerjQuery Uncaught Auslöser Range: Maximale Call-Stack-Größe überschritten -Jquery

Uncaught RangeError: Maximum call stack size exceeded

meine jQuery-Funktion:

$('td').click(function() { 
     if ($(this).context.id != null && $(this).context.id != '') { 
      foo($('#docId').val(), $(this).attr('id')); 
     } 
     return false; 
    }); 

Es gibt Zehntausende von Zellen in der Seite. Im Allgemeinen assoziiere ich Stapelüberläufe jedoch mit Rekursion, und in diesem Fall gibt es, soweit ich sehen kann, keine.

Hat die Schaffung eines Lambda wie diese automatisch eine Last von Sachen auf dem Stack generieren? gibt es einen Weg um es herum?

+1

Was ist foo? Dieser Code sagt nichts über den Fehler – Lixus

+0

Ich denke, wir müssen sehen, was 'foo' ist ... Call-Stack-Größe überschritten bedeutet, dass Ihre Funktion (oder eine andere Funktion wie foo) landet sich selbst wieder und wieder aufrufen. Wenn Sie zum Beispiel einen Klick auf Ihren 'td' in der Zeile auslösen. – arbuthnott

+1

"Zehntausende von Zellen in der Seite" Ist das ... wirklich ... notwendig? –

Antwort

0

Wenn Sie wirklich haben (müssen?) Tausende von td s auf Ihrer Seite, ich denke, es wäre die Rechenlast aufzuhellen einen einzigen Klick Zuhörer zu einem Vorfahren Element hinzuzufügen, anstatt einen Klick Zuhörer zu jedem einzelnen td hinzuzufügen. Zum Beispiel:

$('table').on('click', 'td', function() { 
    var $tabledata = $(ev.target).closest('td'); 
    if ($tabledata.context.id != null && $tabledata.context.id != '') { 
     foo($('#docId').val(), $tabledata.attr('id')); 
    } 
    return false; 
}); 

Ich denke, das die Last zu der Zeit hinzugefügt werden aufhellen würde die Handler, aber möglicherweise nicht, wenn sie feuern. Wenn Sie andere Probleme haben, die Ihren Fehler verursachen (zum Beispiel in der Methode foo), müssten wir den Code sehen, um diese Fehler zu beheben.

Verwandte Themen