多个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对应不同的输入/自动完成组。
答
如果我正确理解您的问题,您希望除了项目文本外,还将自动完成元素或其索引传递给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
您的意思是在函数doSearch()中,您想知道使用哪个数据集,具体取决于触发事件的自动完成吗? – 2012-04-01 08:35:31
@Didier Ghys我不知道你的意思是“触发事件的自动完成”,据我所知,自动完成不会触发点击事件。它的点击,但:)但我认为你从另一个角度看问题,这是好的,无论什么工作完成;所以点击李1会做doSearch 1.你会说只是改变doSearch的名称,但我试过了,它不起作用。 – Youss 2012-04-01 08:46:51
我的意思是你绑定在锚上的事件(并非真正由自动完成触发 - 抱歉让你困惑)。但我认为你不必自己绑定一个事件,使用内置的[select](http://jqueryui.com/demos/autocomplete/#event-select)事件。 – 2012-04-01 08:58:47