JQuery:超出RangeError最大调用堆栈

时间:2015-06-28 03:57:06

标签: jquery events onchange

我有一个on change事件,当更改选择框时会触发。但是,选择框位于被替换的div内部,因此重新生成选择框。由于此错误可能是由无限循环引起的,因此我猜测我的触发事件也必须在创建选择框时触发。我尝试过很多事情都没有成功。

有没有人知道如何防止此事件在创建时触发,并且只有在手动更改部分时?

这是原始代码,没有任何尝试删除挂钩或解决问题。

jQuery('#primary-div .options_box').on( 'change', 'select', function(e) {
    e.preventDefault();

    // prevent user from changing again until this process is complete
    jQuery('#primary-div').block({ message: null, overlayCSS: { background: '#f1f1f1', backgroundSize: '32px 32px', opacity: 0.6 } });

    var sel_type = jQuery('#chart_type');
    var sel_month = jQuery('#chart_month');
    var sel_year = jQuery('#chart_year');

    var data_ap = { action: 'update_primary_div', type: sel_type, month: sel_month, year: sel_year };
    $.post( ajaxurl, data_ap, function( response ) {

        $( '#primary-div' ).html( response );

    });

});

更新

在调试时,我在每行代码后添加了console.log()行,发现post函数中的字符串从未打印出来,但post之前的所有内容都没有。我甚至注释掉了替换DIV内部HTML的代码行,错误仍然存​​在。所以我认为这毕竟不是无限循环的原因。还有其他想法吗?

2 个答案:

答案 0 :(得分:0)

由于.options_box位于#primary-div,当从 Ajax调用收到响应时,#primary-div的HTML会更新,从而导致{{1}再次修改......

更改 HTML结构,以便.options_box内的选择仅在用户更改时更改。

答案 1 :(得分:0)

想出来。在找到有用的文章后,我了解到堆栈错误更常见的原因是将非法参数传递给函数。就在这时,我意识到自己的错误。 jQuery不允许你将其完整变量传递给post函数(这不是我的意图,当我从选择框中获取所选值时,我忘记了一段重要的代码):

var sel_type = jQuery('#chart_type').val(); var sel_month = jQuery('#chart_month').val(); var sel_year = jQuery('#chart_year').val();