Maximum call stack size exceeded

jquery_ui_logo.thumbnail He estado volviéndome loco desde que utilizando la funcionalidad de jQuery UI Dialog en Chrome al pulsar en cada uno de los botones que había definido me salía el siguiente error: ‘RangeError: Maximum call stack size exceeded’. Al probar el mismo script en mozilla se bloqueaba completamente y la pista final me la dio Opera que me mostraba el siguiente error: ‘Event thread: click Abort (control stack overflow)’.

Sacando conclusiones si Maximum call stack size exceeded es un error de webkit asociado a un exceso de llamadas recursivas en una misma función entonces deduje con el error de Opera que estaba asociado al hacer click en cada botón del nuevo diálogo.

Curiosamente ejecutaba todas las funciones que estaban definidas dentro de cada botón y el script dejaba de funcionar cuando ponía la opción $(this).dialog(‘close’);

El script original es el siguiente:

$("#dialog_attachment").dialog({
            bgiframe: true,
            autoOpen: false,
            width:850,
            height:650,
            modal: true,
            buttons: {
                'Adjuntar': function() {
                    document.frm_adjuntos_envío.submit();
                    $(this).dialog('close');
                },
                Cancel : function() {
                    document.frm_adjuntos_envío.submit();
                    $(this).dialog('close');
                }
            },
            close: function() {
                document.frm_adjuntos_envío.submit();
                $(this).dialog('close');
            }
        });

La solución, eliminar la opción close, al parecer es redundante redefinirla con el cierre y para prevenir eliminé el botón cancel pues se mantiene la funcionalidad de cerrar la ventana en el borde superior derecho, la declaración quedaría de la siguiente manera:

$("#dialog_attachment").dialog({
            bgiframe: true,
            autoOpen: false,
            width:850,
            height:650,
            modal: true,
            buttons: {
                'Adjuntar': function() {
                    document.frm_adjuntos_envío.submit();
                    $(this).dialog('close');
                }
            }
        });

Comentarios

Anónimo ha dicho que…
muchas gracias me ayudo a resolver el problema. Lo único que hice fue eliminar la llamada a $(this).dialog("close")
en close: function(){}.

Saludos