我正在使用JQuery UI的自动完成小部件,并希望能够访问我正在附加自动完成的当前选择器。我找到了一种方法来访问选择器,使用前面的问题,但是源函数被错误地调用。
我目前的代码如下所示
$("input[id$=artist]").each(function() {
e1 = $(this);
curID = $(this).parent('td').parent('tr').attr('id');
e1.autocomplete({
minLength: 3,
source: function(request, response) {
findSuggestions(request, response, 'artist', artist_cache, curID);
}
});
});
如您所见,我获取当前选择器并将其放入e1。有多个行具有给定的'artist'输入,我希望能够知道findSuggestions
方法中每行的ID,但是当调用该方法时,每行都被赋予相同的ID(这是引用最后一行。
知道为什么会这样吗?我是否错误地接近了这个问题?
谢谢!
答案 0 :(得分:3)
您需要在闭包内定义变量以赋予其局部范围,否则您将创建全局变量
$("input[id$=artist]").each(function() {
var e1 = $(this);
var curID = $(this).parent('td').parent('tr').attr('id');
e1.autocomplete({
minLength: 3,
source: function(request, response) {
findSuggestions(request, response, 'artist', artist_cache, curID);
}
});
});
答案 1 :(得分:2)
您忘记将var
放在curID
变量之前。
在窗口对象上创建一个全局变量curID
,因此每个源回调函数都引用同一个对象,因而是值。
更改为
var curID = $(this).parent('td').parent('tr').attr('id');
永远不要忘记在变量声明之前放置var
,因为它可能是这个痛苦的错误的来源。