代码之家  ›  专栏  ›  技术社区  ›  Dennis

insertAfter函数-超过最大调用堆栈大小错误

  •  0
  • Dennis  · 技术社区  · 6 年前

    有多种因素 动态放置 通过Wordpress插件使用Javascript。

    <div id="billing_address_1_field">address</div>
    <div id="billing_country_field">country</div>
    <div id="billing_postcode_field">postcode</div>
    <div id="billing_city_field">city</div>
    

    因此,我添加了以下jQuery代码来更改元素的顺序:

    (function($){
    
        $("body").bind("DOMNodeInserted", function() {
    
            //move before country fields
            $(this).find('#billing_postcode_field').insertBefore('#billing_country_field');
            $(this).find('#billing_city_field').insertBefore('#billing_country_field');
        });
    })(jQuery);
    

    邮政编码和城市元素应在 #billing_country_field .

    当我进入那个特定的网页时,我得到了这个错误的无限循环: Maximum call stack size exceeded error

    预期结果:

    <div id="billing_address_1_field">address</div>
    <div id="billing_postcode_field">postcode</div>
    <div id="billing_city_field">city</div>
    <div id="billing_country_field">country</div>
    

    因为元素是动态放置的,所以我不能这么做:

    $('body').find('#billing_postcode_field').insertBefore('');
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Carsten Løvbo Andersen Dan Nemtanu    6 年前

    我不知道你为什么想用这个活动 DOMNodeInserted ,但你仍然可以做你想做的事,而不必:

    (function($) {
      $("body").find('#billing_postcode_field').insertBefore('#billing_country_field');
      $("body").find('#billing_city_field').insertBefore('#billing_country_field');
    })(jQuery);
    

    (function($) {
      $("body").find('#billing_postcode_field').insertBefore('#billing_country_field');
      $("body").find('#billing_city_field').insertBefore('#billing_country_field');
    })(jQuery);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="billing_address_1_field">add</div>
    <div id="billing_country_field">country</div>
    <div id="billing_postcode_field">postcode</div>
    <div id="billing_city_field">city</div>