未使用正确的引用调用自动完成
Autocomplete not using correct reference call
我有一个创建自动补全的函数。在正常情况下,它工作得很好。函数调用的一个例子是:
getList('employee', { type: 'auto', id: 'txtMgrID', callback: function (id) { $('#hidMgrID').val(id); } });
这个函数调用对我来说工作得很好——它所做的是使用员工列表为文本输入元素txtMgrID创建一个自动补全。'callback'设置了自动补全的select函数——在这个例子中,设置了一个隐藏的输入元素'hidMgrID'和自动补全id值。再次-正常工作只是很好(有这个运行在我的网站上的多个地方。)
我遇到的问题是当我在一个循环中构建这个。我有一个对话框窗口,将有多个员工自动完成。因此,我使用循环构建对话框的部分(因此它创建了txtMgr0 - txtMgr4,以及hidMgrID0 - hidMgrID4)。对话框可以创建任意数量的这些(取决于给定经理有多少直接雇员),这就是我使用循环来完成此操作的原因。
打开对话框后,我使用另一个for循环来进行自动完成创建调用。我的代码是:
for (x = 0; x < mgrcnt; x++) {
getList('employee', { type: 'auto', id: 'txtMgr' + x, callback: function (id) { $('#hidMgrID'+x).val(id); } });
}
现在,我的问题是,所有的自动完成文本框更新最后的hidID…这就好像,在我的例子中,$('#hidMgrID'+x)计算为$('#hidMgrID4')对于循环中的每个getList调用。奇怪的是,如果我在get列表调用之前(作为循环的一部分),也在回调函数引用中(在jquery .val引用之前),当对话框加载时,它会给我#hidMgrID0然后1,然后2等,然后当我在文本元素中输入一个管理器时,它会为所有这些发出#hidMgrID4警报。
我不明白为什么会发生这种事…任何帮助解决这个问题的人都将不胜感激!
提前感谢!
克里斯您有一个作用域问题:您正在创建一个函数并将其存储到回调属性中,但是x变量没有立即求值。因此,当函数执行并计算x时,x变量被赋值,因为for已经结束。
一个可能的解决方案是使用这个想法:
你在做什么:
var arr=[];
for(var i=0;i<10;i++){
arr[i] =function(){
console.log(3+i);
}
}
console.log(i); // 10
arr[0](); // 13
arr[1](); // 13
你应该怎么做:
var arr=[];
for(var i=0;i<10;i++){
(function(){
var x=i;
arr[x] =function(){
console.log(3+x);
}
}())
}
console.log(i); // 10
arr[0](); // 3
arr[1](); // 4
经过更多的研究,我最终得出了我自己的答案-基本上我必须创建一个外部函数来返回我需要的函数:
function makeCallback(i) {
return function(id) { $('#hidMgr'+i).val(id); }
}
那么我就可以在for循环中使用它了:
for (x = 0; x < mgrcnt; x++) {
getList('employee', { type: 'auto', id: 'txtMgr' + x, callback: makeCallback(x) });
}
我的问题解决了
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 调用setTimeout内部的函数时发生引用错误
- Google可视化addListener调用函数引用错误
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- 包含的文件中引发引用错误..除非调用文件包含慢速代码
- 在一个服务中引用多个API调用(Angular)
- 在表单提交按钮的点击事件中调用函数时发生引用错误
- 如何从函数引用元素(从事件侦听器调用)
- React如何调用ES6类的呈现函数,使“this”不引用类本身
- 在调用的函数中使用对象引用(this)
- 未调用Javascript函数.Firebug显示引用错误
- 通过引用进行的Javascript调用不起作用
- 调用时可以省略引用对象
- 正确引用延迟 AJAX 调用中的变量
- 使用依赖注入时,通过引用调用服务或直接调用服务是否有区别
- 了解 JavaScript 函数调用和引用
- Chrome 扩展程序引用/调用内容脚本中的其他脚本函数
- 如何通过在javascript中引用来调用变量
- 在侦听器函数 (Javascript) 中调用方法时引用错误
- Javascript 调用引用