javascript - information - user agent detection



Chrome/jQuery Uncaught RangeError: Die maximale Call-Stack-Größe wurde überschritten (4)

Ich erhalte den Fehler "Uncaught RangeError: Maximale Call-Stack-Größe überschritten" in Chrome. Hier ist meine jQuery-Funktion

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

Beachten Sie, dass auf der Seite mehrere zehntausend Zellen vorhanden sind. Im Allgemeinen assoziiere ich Stapelüberläufe jedoch mit Rekursion, und in diesem Fall gibt es, soweit ich sehen kann, keine.

Wird beim Erstellen eines solchen Lambda automatisch eine Menge Material auf dem Stack generiert? gibt es einen Weg um es herum?

Im Moment besteht die einzige Problemumgehung darin, die onclick-Ereignisse beim Rendern des HTML-Codes für jede Zelle explizit zu generieren, wodurch der HTML-Code wesentlich größer wird.

https://code.i-harness.com


Da "es Zehntausende von Zellen auf der Seite gibt", wird die Bindung des Klick-Ereignisses an jede einzelne Zelle zu einem schrecklichen Leistungsproblem führen. Es gibt eine bessere Möglichkeit dies zu tun, nämlich ein Klick-Ereignis an den Körper zu binden und dann herauszufinden, ob das Zellenelement das Ziel des Klicks war. So was:

$('body').click(function(e){
       var Elem = e.target;
       if (Elem.nodeName=='td'){
           //.... your business goes here....
           // remember to replace $(this) with $(Elem)
       }
})

Diese Methode erledigt nicht nur Ihre Aufgabe mit dem nativen "td" -Tag, sondern auch mit dem später angehängten "td". Ich denke, dass Sie an diesem Artikel über Ereignisbindung und -teilnehmer interessiert sind

Oder Sie können einfach die " .on() " Methode von jQuery mit dem gleichen Effekt verwenden:

$('body').on('click', 'td', function(){
        ...
});

Dieses Problem ist bei mir aufgetreten, als ich jQuery Fancybox in einer Website mit vielen anderen jQuery-Plugins verwendet habe. Als ich die LightBox ( Seite hier ) anstelle von Fancybox benutzt habe, ist das Problem weg.


Meiner war mehr ein Fehler, was passiert ist, war Loop-Klick (ich denke) im Grunde, indem Sie auf die Anmeldung der Eltern wurde auch geklickt, was endete verursacht Maximale Call-Stack-Größe überschritten.

$('.clickhere').click(function(){
   $('.login').click();
});

<li class="clickhere">
  <a href="#" class="login">login</a>
</li>

Sie können diesen Fehler auch erhalten, wenn Sie eine Endlosschleife haben. Stellen Sie sicher, dass Sie keine endlosen, rekursiven Selbstreferenzen haben.





stack-overflow