问题
我正在注册一个 keyup 事件,当它被激活时,会显示一个建议主题的列表(使用 JSON)。
我的问题是,当一个 keyup 被注册时,它似乎也能记住以前的 keyup。这意味着它不是使用 JSON 发送一个请求,而是使用 JSON 发送多个请求(取决于已注册的 keyup 数量)。这当然是非常低效的,我想每个 keyup 只处理 1 个请求。
我试过什么
我已经尝试逐步执行程序采取的每一个动作。当我到达第二个 keyup 语句时出现问题(第一个是在我的模板中注册一个 keyup,第二个是我正在使用的类中的一个 keyup,它从指定的字段中检索值)。从这一点开始,每个键都以某种方式“添加”到以前的键中,例如:按下了
3 个先前的键 -> (示例)按下了退格键 -> 现在为退格键注册了 4 个键键,所有键都包含相同的信息。
我已经尝试设置语句等来检查以前的事件是否与当前事件相同,但这真的没有奏效。该类在不同的站点上工作,所以我认为问题出在其他地方,可能是模板(它包含另一个注册 keyups 的事件,但完全删除它不会改变任何东西)是随着时间的推移由不同的程序员创建的(它有点像虽然我看不到任何应该造成这种奇怪行为的东西)。
相关代码
模板代码:
$('subject_input').addEvent('keyup', function(event){
var project_id = $('projectId').options[$('projectId').selectedIndex].get('value');
if(project_id != "" && project_id != 0){ //Als er een project geselecteerd is
var elInput = $('subject_input');
var gc = new GooCompleter('subject_input', {
action: '/houroverview/ajax_subjects/'+project_id+'/', // JSON source
param: 'search', // Param string to send
listbox_offset: {x: 0, y: 0}, // Listbox offset for Y
typebox_offset: {x: 1, y: 1},
delay: 100, // Request delay to 0.1 seconds
});
//Irrelevant code
});
类代码keyup:
// Retrieve suggestions on keyup
this.field.addEvent('keyup', function(event) {
console.log(event); //this shows the amount of keyups etc.
//more code
}.bind(this));
我应该指出,我对 JavaScript 并不是那么好,这意味着我要花很多时间来弄清楚一些东西。我仍然在这段代码中看不到任何会产生这种奇怪行为的东西。
问题
是什么导致了这种奇怪的行为,我该如何摆脱它?
干杯。