今天才晓得,原来jQuery里面的on()方法,给元素绑定事件的时候,绑定多少次,该事件被触发的时候,就执行多少次。
错误代码示例如下:
let newQFlag=true;
const btnStr = '<button class="btn btn-default btn-xs newBtn" type="button">自建问题</button>';
$qs.on('select2:open', () => {
if (newQFlag) {
$('.select2-search__field').css('width', '240px');
$('.select2-search.select2-search--dropdown').append(btnStr);
newQFlag = false;
}
$('.newBtn').on('click', () => {
const inputVal = $('.select2-search__field').val();
if (!inputVal) {
alertMessage('自建问题不能为空!');
} else {
$.ajax({
url: 'knowledge/editByA/checkQuestion',
type: 'POST',
data: cleanObject({ literal: inputVal }),
success: (data) => {
const nmsg = data.msg;
if (!nmsg) {
const $display = $('.select2-selection__rendered');
$display.text(inputVal);
$display.attr('title', inputVal);
alertMessage('自建问题合格!', true);
} else {
if (nmsg.status === 1) {
alertMessage('该问题已经存在,将前往审核页面进行审核!');
location.href = `${ctx}/knowledge/review/index?from=update&id=${nmsg.question.id}`;
} else if (nmsg.status === 8) {
alertMessage('该问题已经存在,将前往编辑页面进行编辑!');
location.href = `${ctx}/knowledge/editByA/update?pairId=${nmsg.id}`;
}
}
}
});
}
});
});
当我知道这个原理之后,我之间吧click()绑定的内容放到了if里面,让这个on也只给这个元素绑定一次。这样很好理解。
可是,后来有个大神,这个几下给我改的,我就看不明白了,代码如下:
若有人知道,烦请回复哈哈!