jQuery自动完成将查询转换为小写

Posted

技术标签:

【中文标题】jQuery自动完成将查询转换为小写【英文标题】:jQuery Autocomplete converting query to lowercase 【发布时间】:2015-09-03 15:41:42 【问题描述】:

我正在为一个项目使用 jQuery Autocomplete 插件 1.1。

这是我的调用代码:

$("#txtCombo").autocomplete("http://www.example.com/autocomplete.php", 
            autoFill: false,
            width: 550,
            minChars: 3,
            selectFirst: false
        );

问题是,无论我在自动完成中输入什么,当它到达 php 文件 autocomplete.php 时,它都会转换为小写

例如如果我搜索“Smart Boy”,php 文件将收到“smart boy”。这在某种程度上很好,因为当我在数据库中对查询进行类似搜索时,无论字母大小写如何,我都会得到所有匹配的结果。

但问题是,当我为希腊字符运行此脚本时,例如当我输入查询“Μικρές Οικιακές Συσκευές”时,它被转换为“μικρές οικιακές συσκευές”。现在,当我使用如下类似查询时:

"SELECT ID, NAME FROM CATEGORIES WHERE NAME LIKE '%".$query."%'"

我什么也没得到,因为数据库不使用不区分大小写的搜索来检查希腊字母。

我尝试使用这样的排序规则关键字:

"SELECT ID, NAME FROM CATEGORIES WHERE NAME LIKE '%".$query."%' COLLATE utf8_general_ci"

但我收到此错误: COLLATION 'utf8_general_ci' 对 CHARACTER SET 'latin1' 无效

我知道表格的字符集是 latin1,所以它不适用于 utf8 排序规则,所以如果我尝试使用 latin1_general_ci 排序规则,它会给我这个错误:

排序规则 (utf8_general_ci,IMPLICIT) 和 (latin1_general_ci,EXPLICIT) 的非法混合用于“like”操作

只有当我可以通过将查询转换为小写来停止自动完成时,它才能很好地解决问题。

当我没有在要调用的参数中指定任何此类内容时,为什么插件仍然转换为小写?

任何想法......

【问题讨论】:

【参考方案1】:

我终于通过在 jquery.autocomplete.js 文件中搜索“lower”一词找到了解决方案。我发现如果在调用参数中没有找到“matchCase”选项,或者它没有设置为true,它会将搜索查询转换为小写。

所以我像这样编辑了我的电话:

$("#txtCombo").autocomplete("http://www.example.com/autocomplete.php", 
        autoFill: false,
        width: 550,
        minChars: 3,
        matchCase: true,
        selectFirst: false
    );

它成功了!现在它不会将查询转换为小写。

我认为发布一个它自己的问题可以阐明寻找解决方案的新方法。在此之前,我没有想到在插件文件本身中寻找“lower”这个词。即使插件文件被缩小了,我仍然在那里找到了这段代码:

... if(!options.matchCase)currentValue=currentValue.toLowerCase(); ...

这让我明白了为什么它可以转换为小写。

也许这个答案会帮助有同样情况的人。

问候

【讨论】:

【参考方案2】:

您可以使用混合大小写匹配...并且在 onClickAfter 回调中...您可以访问原始项目的大小写完好无损。

例如...如果我的数据集有一个名为“名称”的属性,我可以通过以下方式检索它的原始值:

 onClickAfter: function (node, a, item, event) 

    var name = item.name;
    . . . . .

【讨论】:

以上是关于jQuery自动完成将查询转换为小写的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI Ajax 自动完成区分大小写 ASP.net MVC

带有预先转换的 json url 的 jQuery UI 自动完成

YII2如何将查询结果发送到jquery自动完成?

jquery 自动完成 自动补全 实时搜索 实时查询 即时搜索 即时 查询

ASP.NET List<> 用于 JQuery 的 AJAX 自动完成。 ?转换为 JS JSON 或 ajax 调用

来自 URL 查询字符串的 jQuery 自动完成搜索