Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery自动完成:根据ID隐藏项_Javascript_Jquery_Jquery Ui_Autocomplete_Jquery Ui Autocomplete - Fatal编程技术网

Javascript jQuery自动完成:根据ID隐藏项

Javascript jQuery自动完成:根据ID隐藏项,javascript,jquery,jquery-ui,autocomplete,jquery-ui-autocomplete,Javascript,Jquery,Jquery Ui,Autocomplete,Jquery Ui Autocomplete,我有一个数组,其中一些对象具有相同的“id”属性,如下所示: var regions = [ {'id': 1, 'value': 'Ankara'}, {'id': 2, 'value': 'İstanbul'}, {'id': 2, 'value': 'Istanbul'} ] var autoComplete = $('#myInput').autocomplete({}); 如果存在重复项,我将尝试仅显示某个ID的第一个对象(在本例中,我希望显示“İstanbul”,但不

我有一个数组,其中一些对象具有相同的“id”属性,如下所示:

var regions = [
  {'id': 1, 'value': 'Ankara'},
  {'id': 2, 'value': 'İstanbul'},
  {'id': 2, 'value': 'Istanbul'}
]
var autoComplete = $('#myInput').autocomplete({});
如果存在重复项,我将尝试仅显示某个ID的第一个对象(在本例中,我希望显示“İstanbul”,但不显示“伊斯坦布尔”)。 我尝试在源属性中使用函数,但失败了,我不确定需要在哪里执行此操作。。。以下是一个片段:

var区域=[
{'id':1,'value':'Ankara'},
{'id':2,'value':'İstanbul'},
{'id':2,'value':'Istanbul'}
]
$('#myInput')。自动完成({
资料来源:区域
})

这可能是您的解决方案。我创建了一个函数,可以根据属性从数组中删除重复项。函数将向uniqueArray添加唯一对象,将忽略具有相同id的所有后续项

之后,我将uniqueArray传递给jQuery autocomplete

记住Array.reduce在IE9上起作用+

如果您有任何问题,请随时提问

var区域=[
{'id':1,'value':'Ankara'},
{'id':2,'value':'İstanbul'},
{'id':2,'value':'Istanbul'}
]
var uniqueRegions=removeDuplicates(区域“id”)
功能移除副本(arr,字段){
var u=[];
arr.REDUCT(功能(a、b){
如果(a[字段]!==b[字段]){
u、 推(b);
}
返回b;
}, []);
返回u;
}
$('#myInput')。自动完成({
资料来源:联合国大学
})

多亏了评论中的vijayP,我成功地实现了我试图用renderItem做的事情

首先,您需要存储一个变量,如下所示:

var regions = [
  {'id': 1, 'value': 'Ankara'},
  {'id': 2, 'value': 'İstanbul'},
  {'id': 2, 'value': 'Istanbul'}
]
var autoComplete = $('#myInput').autocomplete({});
然后您可以在其上使用_renderItem,以便自定义插件生成的列表:

autoComplete.autocomplete( "instance" )._renderItem = function( ul, item ) {
    //Do your stuff
}
现在你可以在公开赛中做你需要的事情了

以下是完整的片段:

var区域=[{
“id”:1,
“价值”:“安卡拉”
}, {
“id”:2,
“价值”:“斯坦布尔”
}, {
“id”:2,
“价值”:“伊斯坦布尔”
}]
var autoComplete=$('#myInput')。autoComplete({
资料来源:区域,
打开:功能(事件、用户界面){
var$ul=$('地区');
$ul.find('li')。每个(功能(id,区域){
var dataID=$(region.attr('data-id');
var items=$ul.find('[data id=“'+dataID+''“]”);
console.log($(items.length);
如果($(项目)。长度>1){
$(items.hide();
$(items.first().show();
}
});
},
信息:{
结果:'',
结果:函数(){}
}
})
autoComplete.autoComplete(“实例”)。\u renderItem=函数(ul,项){
var$ul=$(ul).prop('id','regions'))
返回$(“
  • ”) .append(item.value) .appendTo($ul); };
    
    
    在将对象数组作为
    参数提供之前,需要对其进行重复数据消除。有关详细信息,请参见此问题:您不能只筛选
    区域
    以排除重复项吗?由于特殊字符,我需要保留数组中的所有项。如果我从数组中删除“istanbul”,并且用户类型为“ist”,则不会显示“İstanbul”。后端开发人员因此向我发送每个区域的“原始”版本。在这种情况下,您可能需要修改autocomplete的源代码(或使用完全不同的插件),因为我不相信它支持每个id的多个值。也许这就是您要找的:参见示例非常感谢,但正如我在评论中所说,我需要将所有项目都传递到插件中,并且只在每个ID的项目上显示。然而,有人给了我一个提示,我成功地实现了我试图做的事情,所以我将写一个答案。再次感谢;)