我正在为项目使用jQuery Autocomplete插件1.1。
这是我的主叫代码:
$("#txtCombo").autocomplete("http://www.example.com/autocomplete.php", {
autoFill: false,
width: 550,
minChars: 3,
selectFirst: false
});
问题是我输入的自动完成功能,当它到达php文件时会转换为小写文件autocomplete.php
例如如果我搜索“智能男孩”,php文件将收到“聪明的男孩”。这在某种程度上是好的,因为当我在数据库中进行类似的查询搜索时,无论字母大小写如何,我都会得到所有匹配的结果。
但问题是,当我为希腊字符运行此脚本时,例如,当我输入查询“ΜικρέςΟικιακέςΣυσκευές”时,它被转换为“μικρέςοικιακέςσυσκευές”。现在当我使用如下的类似查询时:
"SELECT ID, NAME FROM CATEGORIES WHERE NAME LIKE '%".$query."%'"
我什么都没得到,因为数据库不会检查带有不区分大小写搜索的希腊字母。
我尝试使用像这样的collation关键字:
"SELECT ID, NAME FROM CATEGORIES WHERE NAME LIKE '%".$query."%' COLLATE utf8_general_ci"
但是我收到了这个错误: COLLATION'utf8_general_ci'对CHARACTER SET'latin1'无效
我知道表格的charset是latin1所以它不能用于utf8整理,所以如果我尝试使用latin1_general_ci整理,它会给我这个错误:
非法混合排序(utf8_general_ci,IMPLICIT)和(latin1_general_ci,EXPLICIT)进行“喜欢”操作
只有我可以通过将查询转换为小写来停止自动完成,它才能解决问题。
为什么在我没有在要调用的参数中指定任何此类内容时,插件仍会转换为小写?
任何想法......
答案 0 :(得分:0)
我终于通过在文件jquery.autocomplete.js中搜索单词" lower"来找到解决方案。我发现如果选项" matchCase"它会将搜索查询转换为小写。在调用参数中找不到,或者如果它未设置为true。
所以我按照这样编辑了我的电话:
$("#txtCombo").autocomplete("http://www.example.com/autocomplete.php", {
autoFill: false,
width: 550,
minChars: 3,
matchCase: true,
selectFirst: false
});
它有效!现在它不会将查询转换为小写。
我认为自己发布一个问题可以澄清寻找解决方案的新方法。我没有想到要找到"更低的"在此之前的插件文件中。即使插件文件缩小了,我仍然在那里找到了这段代码:
... if(!options.matchCase)currentValue=currentValue.toLowerCase(); ...
让我知道为什么它可以转换为小写。
这个答案可能会帮助有相同情况的人。
此致
答案 1 :(得分:0)
您可以使用混合大小写匹配...和onClickAfter回调..您可以访问原始项目,案例完好无损。
例如......如果我的数据集有一个名为'name'的属性,我可以通过以下方式检索它的原始值:
onClickAfter: function (node, a, item, event) {
var name = item.name;
. . . . .