jquery自动完成从下拉菜单中删除选定的li项

jquery自动完成从下拉菜单中删除选定的li项,jquery,select,autocomplete,html-lists,Jquery,Select,Autocomplete,Html Lists,我使用jQueryAutoComplete(1.8)来填充标记,如中所述 我需要的是从下拉菜单中选择LI项后,该项应从列表中删除 在autocomplete的select部分,我尝试使用diff方法获取当前LI,如 $(this).get(0).tagname //which return undefined e.target.id //which return id of textfield to which autocomplete is bound 假设您的操作与链接到的教程中的操作完

我使用jQueryAutoComplete(1.8)来填充标记,如中所述

我需要的是从下拉菜单中选择LI项后,该项应从列表中删除

在autocomplete的select部分,我尝试使用diff方法获取当前LI,如

$(this).get(0).tagname //which return undefined 
e.target.id //which return id of textfield to which autocomplete is bound

假设您的操作与链接到的教程中的操作完全相同:

  • 在附加自动完成之前,创建一个空数组来保存应该忽略的项(
    var-ignored=[];
    )。您可以将它放在全局范围内,以确保它可以在任何地方访问(放在
    $(function(){…
    )之前)
  • 回调(格式化结果)的定义中,替换此

    //process response
    $.each(data, function(i, val){
        suggestions.push(val.name);
    });
    
    为此:

    //process response
    $.each(data, function(i, val){
        if(ignored.indexOf(val.name) == -1) {
            suggestions.push(val.name);
        }
    });
    
  • 然后,在
    select
    回调中,将所选项目的值添加到
    ignored
    数组中:

    ignored.push(ui.item.value)
    
  • 如果用户单击删除链接,您可能希望“取消忽略”该项。在删除处理程序定义的第一行,添加以下内容:

    var text = $(this).parent().find('a').remove().end().text();
    var position = ignored.indexOf(text);
    if(position != -1) {
        ignored.splice(position, 1);
    }
    // rest of the original code below...
    

  • 您是否使用数组作为autocomplete的数据源?@bFavareto其JSON对象与教程中的一样。下拉菜单只是li项,为什么无法获取该li的id,因为select实际上意味着单击该li项。无论如何,我将通过ur方法查看它的工作原理。在教程中,JSON数据来自服务器端脚本。该列表在您键入时动态填充(即,
  • 是动态创建的)。如果您删除“
  • ”,它可能会在稍后由自动完成插件重新插入。它的工作原理与我所希望的一样好。我只是更改了代码,使菜单在按本文所述进行选择时保持未关闭,以便单击每个元素将该项添加到div中,并立即从列表中删除。根据您的解决方案,我必须重新键入same文本生成列表。是否可以将单击事件分配给li项,然后在该事件中我们可以删除该项。