【问题标题】:Multiple Jquery ui autocomplete on one page一页上的多个Jquery ui自动完成
【发布时间】:2012-04-01 08:22:27
【问题描述】:

我正在使用jQuery UI Autocomplete。我在三个不同的输入上使用它。所以我有:

输入 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() 中,您想知道根据触发事件的自动完成功能使用哪个数据集?
  • @Didier Ghys 据我所知,自动完成不会触发点击事件,我不确定“触发事件的自动完成”是什么意思。它的点击:)但我认为你正在从另一个角度看待问题,这很好,无论完成工作;所以点击li 1会做doSearch 1。你会说只是改变doSearch的名字,但我试过了,它不起作用。
  • 我的意思是你绑定在锚点上的事件(不是真正由自动完成触发 - 抱歉让你感到困惑)。不过我觉得不用自己绑定事件,使用内置的select事件。
  • @Didier Ghys 我已经取出了点击事件并使用“选择”选项进行了尝试 我尝试了一个自动完成功能,我还将功能更改为 doSearch1,2 和 3。所以第二个第三个自动。没有任何事件(单击或选择) 奇怪的是,当“选择:doSearch1(this(text))”时,它仍然使用 doSearch 2 和 3 执行搜索。(这根本不合逻辑)

标签: jquery-ui autocomplete jquery


【解决方案1】:

如果我正确理解您的问题,除了项目文本之外,您还想将自动完成元素或其索引传递给 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());
});

请注意,自 jQuery 1.7 起,bind()delegate()live() 已被 on() 取代,因此您可能希望使用它来注册您的处理程序:

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

如果您的自动完成元素有一个共同的非动态祖先,您也可以将on() 应用于该元素而不是document 以获得一点性能。

【讨论】:

  • 感谢您解决我的问题并详细解释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 2012-03-29
相关资源
最近更新 更多