Uncaught RangeError: Maximum call stack size exceeded mit innerHTML
Ich bin nicht sehr erfahren mit Javascript, aber ich bin mit in einer Frage, die ich nicht verstehen kann. Mein code ist ganz einfach:
document.getElementById ('chat_line_list').addEventListener ("DOMSubtreeModified", LocalMain, false);
function LocalMain ()
{
var chatList = document.getElementById('chat_line_list').lastChild.lastElementChild.innerHTML;
chatList = chatList.replace('InfoThump', '<span class="newemo-1 emoticon"></span>');
chatList = chatList.replace('MuskMelon', '<span class="newemo-2 emoticon"></span>');
chatList = chatList.replace('PoisonApple', '<span class="newemo-3 emoticon"></span>');
chatList = chatList.replace('PoisonBanana', '<span class="newemo-4 emoticon"></span>');
chatList = chatList.replace('PoisonWatermelon', '<span class="newemo-5 emoticon"></span>');
chatList = chatList.replace('PoisonGrape', '<span class="newemo-6 emoticon"></span>');
chatList = chatList.replace('NotNippy', '<span class="newemo-7 emoticon"></span>');
document.getElementById('chat_line_list').lastChild.lastElementChild.innerHTML = chatList;
}
Die Ausnahme tritt in der letzten Zeile der LocalMain () - Funktion, wenn ich Sie ersetzt den innerHTML mit meiner neu modifizierten string. Gibt es etwas in diesem code, der bewirkt, dass eine Schleife oder einen überlauf?
InformationsquelleAutor user2367110 | 2013-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie verursachen eine Endlosschleife!
Hören Sie DOMSubtreeModified auf das element
chat_line_list
, dann aktualisieren Sie das element innerhalb der Funktion an das event!Okay, ich habe mein problem gelöst, durch das hören für DOMNodeInserted statt DOMSubtreeModified. Dies macht Sinn im Zusammenhang mit einem chat-client. Vielen Dank für Ihre Hilfe!
InformationsquelleAutor epascarello
versuchen, diese
InformationsquelleAutor ketan
Ja, im Grunde sagen Sie, dass jedes mal, wenn das element geändert wird, wird
LocalMain
ausgeführt werden soll. AlsLocalMain
ändert sich auch das element, es wird wieder ausgeführt, und wieder,...Können Sie versuchen, entfernen Sie die EventListener und fügen Sie es wieder nach (habe nicht versucht, also kann ich dir nicht sagen, ob es funktionieren würde...)
InformationsquelleAutor Salem
Schlage ich vor, zu warten, zu 100 Mikrosekunden vor dem Aufruf der Funktion mit
setTimeout()
Methode. Dies funktioniert gut für mich - keine Fehler bisher.Bitte seien Sie sich bitte bewusst, dass diese Lösung bei weitem nicht perfekt. Diese Funktion noch ausgeführt wird, zu oft.
InformationsquelleAutor Hexodus