2012-04-04 55 views
1

我想獲得自動完成工作與JQuery UI工作,但我遇到了麻煩,當我嘗試並通過標籤&值對象。JQuery UI自動完成 - 無法加載對象

 var people = []; 
     var test = new Array(); 
     var obj = jQuery.parseJSON(data); 
     $.each(obj.data, function(i,person){ 
       people[people.length] = { 
         label: person.id, 
         value: person.name 
       }; 
       test.push(person.name); 
     }); 

     $("#friend").autocomplete({ 
       source: test, 
       select: function(event, ui) { 
        alert(ui.item.id); 
       } 
     }); 

當我使用「測試」數組它工作正常,但是當我嘗試和使用人反對什麼似乎無論是工作,沒有一個JS錯誤。

有沒有人有任何想法,我缺少什麼?

非常感謝

+0

什麼意思是 「不工作」? – 2012-04-04 16:16:48

+0

就像在我使用測試數組的時候,並開始在框中鍵入一樣,我會得到名稱列表。但是當我使用人物時,我什麼都沒有得到...... – 2012-04-04 16:19:56

+0

爲什麼在每種情況下使用不同的數組方法? '[]'vs'new Array()'和'person [person.length]'vs'.push()'? – 2012-04-04 16:44:40

回答

2

您正在加載你的人向後對象。自動完成在label上工作,而不是value,因此您可以自動完成您的ID而不是名稱。

label將是自動完成用於匹配的文本,並且value是您選擇時返回的內容。

只需按他們,這將工作:

people[people.length] = { 
    label: person.name, 
    value: person.id 
}; 

演示:http://jsfiddle.net/qmmms/1/

+0

自動完成也可以在一個字符串數組上工作,它的'test'應該是... – 2012-04-04 17:04:54

+0

是的,正如他所說的那樣,數組可以工作,但對象不會。這就是爲什麼他的對象不像他期望的那樣工作。 – 2012-04-04 17:05:52

+0

是的,你是正確的,只有當jornare在上面發佈他們的答案時纔會發現。愚蠢的錯誤。 – 2012-04-04 17:10:03

1

嘗試:

people.push({value:person.id,label:person.name}); 

像這樣:

var people = []; 
var obj = {data:[{id:1,name:"Adam"},{id:2,name:"Eve"}]}; 
$.each(obj.data, function(i,person){ 
     people.push({ 
       label: person.name, 
       value: person.id 
     }); 
}); 
$("#friend").autocomplete({ 
     source: people, 
     select: function(event, ui) { 
      alert(ui.item.name); 
     } 
}); 
+0

謝謝。事實證明,我的標籤和價值是錯誤的,所以我在找的東西沒有顯示,但是當我搜索ID時,列表彈出。非常感謝! – 2012-04-04 17:08:51