2012-10-05 54 views
4

我有这样的阵列,从阵列移除jQuery中选定的项目自动完成

var metrics = [ 
     { 
      value: "1", 
      label: "Sold Listings", 
      desc: "sold_listings" 
     }, 
     { 
      value: "10", 
      label: "New Pendings", 
      desc: "new_pendings" 
     }, 
     { 
      value: "4", 
      label: "All Pendings", 
      desc: "all_pendings" 
     }, 
     { 
      value: "2", 
      label: "New Listings", 
      desc: "new_listings" 
     }, 
     { 
      value: "3", 
      label: "Active Listings", 
      desc: "active_listings" 
     } 
    ]; 

我希望做的是选择的项目,比如我会选择积极的房源,这个项目应该从阵列中删除。所以当自动完成再次呈现时,它不会显示选定的项目。

//My Idea of removing the item 
      $.each(metrics,function(i,val){ 
       if(val.value == ui.item.value){ 
        delete metrics[i]; 
       } 
      }); 

回答

5

问题是您没有更新autocomplete的来源。
要做到这一点,你必须使用以下行。

$('.yourAutocomplete').autocomplete('option', 'source', yourArray);

因此,在自动完成选择事件:

假设#autocomplete是你input

select: function(e, ui) { 
    metrics = jQuery.grep(metrics, function(element) { 
     return element.value != ui.item.value; 
    }); 
    $('#autocomplete').autocomplete('option', 'source', metrics) 
    return false; 
} 

demo

参考

+1

如果您将选定的项目添加到数组中,单击删除按钮时又如何? – Jetoox

+0

@Jetoox删除一个并添加其他? –

+0

没有。例如,如果我点击添加项目之一的删除按钮,我如何将它推回到数组中? – Jetoox

2

this后,你可以这样做:

var y = [1, 2, 3] 
var removeItem = 2; 

y = jQuery.grep(y, function(value) { 
    return value != removeItem; 
}); 

编辑:

对于你的榜样,你可以这样做:

var removeItem = "1"; 
metrics = $.grep(metrics, function(val) { 
    if (val.value != removeItem) { 
     return val; 
    } 
}); 

这将删除第一具有值“1”属性的数组项。

+0

如果什么阵列格式我张贴的一样吗?这仍然适用于你的答案吗? – Jetoox

+0

查看我上面的编辑。 – fanfavorite

+0

谢谢你。它工作得很好。 – Jetoox

相关问题