多个Jquery UI自动完成在一页上

问题描述:

我正在使用jQuery UI Autocomplete。我在三个不同的输入上使用它。所以,我有:多个Jquery UI自动完成在一页上

输入ID 1
自动填充处理XML数据1

输入ID 2
自动填充处理XML数据2

输入ID 3
自动完成用xml数据3

我也有一个事件是这样的:

$(".ui-autocomplete li a").live("click",function(){ 

    doSearch($(this).text()); 

}); 

的问题是,这一事件发生在所有三个自动完成的。

我必须在事件代码或其他地方更改事件绑定到特定输入/自动完成的地方。所以我想让事件1,2,3对应不同的输入/自动完成组。

+0

您的意思是在函数doSearch()中,您想知道使用哪个数据集,具体取决于触发事件的自动完成吗? – 2012-04-01 08:35:31

+0

@Didier Ghys我不知道你的意思是“触发事件的自动完成”,据我所知,自动完成不会触发点击事件。它的点击,但:)但我认为你从另一个角度看问题,这是好的,无论什么工作完成;所以点击李1会做doSearch 1.你会说只是改变doSearch的名称,但我试过了,它不起作用。 – Youss 2012-04-01 08:46:51

+1

我的意思是你绑定在锚上的事件(并非真正由自动完成触发 - 抱歉让你困惑)。但我认为你不必自己绑定一个事件,使用内置的[select](http://jqueryui.com/demos/autocomplete/#event-select)事件。 – 2012-04-01 08:58:47

如果我正确理解您的问题,您希望除了项目文本外,还将自动完成元素或其索引传递给doSearch()

跑过自动填充元件是使用closest()简单:

function doSearch(autocomplete, itemText) 
{ 
    // ... 
} 

$(".ui-autocomplete li a").live("click", function() { 
    var $this = $(this); 
    doSearch($this.closest(".ui-autocomplete"), $this.text()); 
}); 

传递其指数是有点麻烦,并且可以与index()实现:

function doSearch(autocompleteIndex, itemText) 
{ 
    // ... 
} 

$(".ui-autocomplete li a").live("click", function() { 
    var $this = $(this); 
    doSearch($this.closest(".ui-autocomplete").index(".ui-autocomplete"), 
     $this.text()); 
}); 

顺便指出bind()delegate()live()自从jQuery 1.7以来已被on()取代,因此您可能想使用它来注册您的处理程序:

$(document).on("click", ".ui-autocomplete li a", function() { 
    // ... 
}); 

如果您自动完成的元素都有一个共同的非动态的祖先,你也可以申请on()该元素,而不是document以获得一些性能。

+0

感谢您解决我的问题,并在如此详细的解释:) – Youss 2012-04-01 09:10:48