magnificpopup"最大调用堆栈大小超过#34;

时间:2014-05-23 11:34:34

标签: jquery ajax triggers stack-overflow magnific-popup

我有一个stackoverflow!

我已经跟踪了源代码到magnificpopup js文件的setFocus和onFocusIn,但我无法确定我在哪里生成它。

一些相关的行(在这个片段中,一个活动的magnificpopup被关闭,一些JS(通过AJAX生成)创建另一个magnificpopup

var active_magnificPopup = $.magnificPopup.instance;
$( '#frm' ).ajaxSubmit( { url: '<?php echo get_template_directory_uri(); ?>/handleSubscriberForms.php', type: 'post', target: '#subscriptionSubmisionTarget' } );
active_magnificPopup.close();

现在回归&#39;表单处理程序

jQuery( document ).ready( function( $ ) {
  $( "#ajax-thankyou" ).magnificPopup( {
    type: "ajax",
    alignTop: false,
    closeOnContentClick: false,
    overflowY: "scroll", // as we know that popup content is tall we set scroll overflow by default to avoid jump
    tError: "<a href=\"%url%\">The content</a> could not be loaded." //  Error message, can contain %curr% and %total% tags if gallery is enabled
  } );
  setTimeout(
    function() {
      $( "#ajax-thankyou" ).trigger( "click" );
    },
    125
  );
} );

据我了解,第一个弹出窗口在第二个弹出窗口出现之前关闭,但是,在移动设备中,代码会生成一个stackoverflow,第一个弹出窗口永远不会关闭(第二个弹出窗口会在它后面打开)。

如果有人能够澄清这一点,那将是非常棒的......在这一点上我的大脑很痛苦。

--- Jai's tip ---

之后的版本

嘿嘿,

看起来,可能源头不是我想的。我已经编辑过&#39; return&#39;现在并没有使用触发器(下一个代码框)。这个东西就像之前一样(如计算机中的魅力,移动设备中的stakoverflow)。

echo '
    <script>
        jQuery( document ).ready( function( $ ) {
            setTimeout(
                function() {
                    $.magnificPopup.open( {
                        items: {
                            src: "' . get_template_directory_uri() . '/form-thankyou.php?pi=' . $post_ID . '"
                        },
                        type: "ajax",
                        alignTop: false,
                        closeOnContentClick: false,
                        closeBtnInside: true,
                        overflowY: "scroll",
                        tError: "<a href=\"%url%\">The content</a> could not be loaded."
                    } );
                },
                125
            );
        } );
    </script>
';

这里是控制台的日志(我明白在o._setFocus和o._onFocusIn之间生成了无限循环,但我无法确定如何跟踪生成它的元素)

Uncaught RangeError: Maximum call stack size exceeded jquery.tools.min.js:37
---From here to the end is repeating---
f.event.trigger jquery.tools.min.js:37
(anonymous function) jquery.tools.min.js:37
e.extend.each jquery.tools.min.js:36
e.fn.e.each jquery.tools.min.js:36
f.fn.extend.trigger jquery.tools.min.js:37
f.fn.(anonymous function) jquery.tools.min.js:37
e.fn.extend.focus jquery.ui.core.min.js?ver=1.10.4:4
o._setFocus magnific-popup.min.js:3
o._onFocusIn magnific-popup.min.js:3
f.event.dispatch jquery.tools.min.js:37
h.handle.i jquery.tools.min.js:37

提前致谢

1 个答案:

答案 0 :(得分:0)

当我使用.trigger()方法时,我也遇到了同样的问题。我做了什么的解决方案,我做了一个功能,并在需要时再次调用它,所以你可以这样做:

function magPopup(){
  $( "#ajax-thankyou" ).magnificPopup( {
    type: "ajax",
    alignTop: false,
    closeOnContentClick: false,
    overflowY: "scroll", // as we know that popup content is tall we set scroll overflow by default to avoid jump
    tError: "<a href=\"%url%\">The content</a> could not be loaded." //  Error message, can contain %curr% and %total% tags if gallery is enabled
  });
}

jQuery(document).ready(function($) {

  magPopup();

  setTimeout(function() {
      magPopup();
    }, 125);
});