2012-10-05 87 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

相關問題