在JQuery自动完成中使用当前选择器

时间:2010-07-15 07:37:48

标签: jquery jquery-ui jquery-autocomplete

我正在使用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(这是引用最后一行。

知道为什么会这样吗?我是否错误地接近了这个问题?

谢谢!

2 个答案:

答案 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,因为它可能是这个痛苦的错误的来源。