我在幾個不同的頁面上使用Jorn Zaefferer的自動完成插件。在這兩種情況下,顯示字符串的順序都有點混亂。jQuery「自動完成」插件搞亂了我的數據順序
例1:字符串數組:基本上他們是按字母順序排列,除了常識已經被推到了頂部:
常識,藝術與設計,商科,公民,設計與技術,英語,地理,歷史,信息和通信技術,數學,MFL法語,MFL德語,MFL西班牙語,音樂,體育,PSHE,宗教教育,科學,別的東西
顯示的串:
常識,地理,藝術和設計,商業研究,公民身份,設計與技術,英語,歷史,ICT,數學,M FL法語,MFL德語,MFL西班牙語,音樂,體育,PSHE,宗教教育,科學,別的東西
請注意,地理學已被推到第二個項目,在普通知識之後。其餘的都很好。
示例2:字符串數組:如上所述,但使用跨課程而不是常規知識。
跨課程,藝術與設計,商業研究,公民身份,設計與技術,英語,地理,歷史,ICT,數學,MFL法語,MFL德語,MFL西班牙語,音樂,體育,PSHE,科學,別的東西
顯示的串:
跨學科,公民,藝術與設計,商科,設計與技術,英語,地理,歷史,信息和通信技術,數學,MFL法語,MFL德語,MFL西班牙語,音樂,體育,PSHE,宗教教育,科學,別的東西
在這裏,公民已經pu流到了第2位。
我已經做了一些嘗試,看起來好像有一個錯誤,指出「在第一個項目之後放置與第一個項目相同的信件並將其他項目單獨留下」。有點神祕。我嘗試了一些調試,通過觸發自動完成插件代碼中的警報,但無處不在我可以看到,它使用正確的順序。它似乎只是在它表現出錯的時候。
任何想法的人? 最大
編輯 - 回覆克林特
感謝在代碼中的相關位指着我順便說一句。爲了使診斷更簡單,我將值的數組更改爲[「胡蘿蔔」,「蘋果」,「櫻桃」],自動完成重新命令爲[「胡蘿蔔」,「櫻桃」,「蘋果」]。
這裏的陣列,它生成用於stMatchSets:
stMatchSets =({ '':[#1 = {值: 「胡蘿蔔」,數據:[ 「胡蘿蔔」],結果是: 「胡蘿蔔」}, #3 = {value:「apple」,data:[「apple」],result:「apple」},#2 = {value:「cherry」,data:[「cherry」],result:「cherry」}] ,c:[#1#,#2#],a:[#3#]})
因此,它將第一個字母一起收集到一張地圖中,作爲第一遍匹配策略很有意義。我希望它能做的是在填充顯示的列表時使用給定的數組值,而不是地圖。我不能完全理解代碼內部的緩存內容(我對javascript不太熟悉)。
解決 - 我通過在插件中黑客入侵解決了這個問題。
在第549行(或565),我們返回一個變量csub,它是一個保存匹配數據的對象。在它返回之前,我重新排列順序,使得訂單與我們給定的原始數組值相匹配,即我們曾經首先構建索引,並將其放入另一個變量中:
csub = csub。 sort(function(a,b){return originalData.indexOf(a.value)> originalData.indexOf(b.value);})
hacky但它的工作原理。就我個人而言,我認爲這種行爲(可能編碼更乾淨)應該是插件的默認行爲:即結果的順序應該匹配原始傳遞的可能值的數組。這樣,用戶可以按照字母順序排列數組(如果他們想要的話)(以微不足道的方式)以字母順序得到結果,或者他們可以保留自己的「自定義」順序。
謝謝snz3,完美的作品。歡呼,最大 – 2010-06-21 09:37:24