我在几个不同的页面上使用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