我有一个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的代码行,错误仍然存在。所以我认为这毕竟不是无限循环的原因。还有其他想法吗?
答案 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();