I couldn't get any possible reason as to why is this happening. I have a button which opens a bootstrap popup. But before opening the modal I need to alter some of my variables, So I am triggering a click event on hidden button which opens the bootstrap modal. HTML looks something like-
<div id="visible-button">
<span class="hidden" id="open-modal" data-toggle="modal" data-target="#popup-modal"></span>
</div>
And the js code is something like-
$('#visible-button').click(function(){
//perform data manipulation
$('#open-modal').trigger('click');
});
But this produces
Uncaught RangeError: Maximum call stack size exceeded
If I edit the code to
$('#visible-button').click(function(){
//perform data manipulation
setTimeout(function(){
$('#open-modal').trigger('click');
}, 500);
});
The modal keeps opening and dissappearing for ever. What is exactly happening here? I have triggered click event in the past too but have never faced such a scenario. Thanks for the help in Advance.
My guess is the click events are being called recursively without an end. Do you have any callback function for the click event for
open-modal
<span>
? If so, please share it.This will prevent the error. The reason for the error is you're clicking the same parent recursively. Having the button and the modal separately will fix the problem.
As
open-modal
is wrapped insidevisible-button
, triggering a click onopen-modal
is equivalent to triggering a click onvisible-button
. So when you click on visible button, onclick event ofvisible-button
gets triggered which intern clicks onvisible-button
again, and it gets into a infinite loop.Its due to event propagation from child element to parent element. When you click
<span>
(child element) it propogate event to parent<div>
.You have binded event when parent click it click on child. so in propofgation of click event goes in infinite loop so you have to stop propogation by
e.preventDefault();
orreturn false;
on end of click event function