JQuery:超出了RangeError最大调用堆栈

JQuery:超出了RangeError最大调用堆栈,jquery,events,onchange,Jquery,Events,Onchange,我有一个on change事件,当选择框更改时触发。但是,选择框位于被替换的div内,因此会重新生成选择框。由于这个错误可能是由无止境的循环造成的,我猜我的触发器事件也必须在创建选择框时触发。我尝试过很多事情,但都没有成功 是否有人知道如何防止在创建时触发此事件,以及仅当手动更改部分时才触发此事件 这是原始代码,未尝试移除挂钩或解决问题 jQuery('#primary-div .options_box').on( 'change', 'select', function(e) { e.

我有一个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的代码行,错误仍在继续。所以我认为这毕竟不是一个无休止循环的原因。还有其他想法吗?

因为.options\u框在primary div中,当从Ajax调用接收到响应时,primary div的HTML将被更新,这将导致再次修改.options\u框


更改HTML结构,使主div中的选择仅在用户更改时更改。

解决了这个问题。在找到一篇有用的文章后,我了解到堆栈错误通常是由向函数传递非法参数引起的。就在这时,我意识到了我的错误。jQuery不允许您将其全部变量传递给post函数,这不是我的意图,在从选择框中获取所选值时,我忘记了一段重要的代码:

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

请发布一些导致错误的示例代码,以支持您的问题。您可能还可以在上使用$.one而不是$.on,并在$.post响应上重新添加处理程序。我尝试了$.one,但没有任何区别。它必须在元素创建时重新开始。所以这是不可能的?三个选择框中的第一个将更改以下选择框中的选项。我需要通过PHP而不是JS来管理这个div,原因有几个:其中包括WordPress过滤器、翻译插件,而且这样做要容易得多。所以我需要能够更新这个盒子,而不让它陷入无休止的循环。