2015-06-18 5 views
0

Я использую jQuery Autocomplete plugin 1.1 для проекта.jQuery Autocomplete преобразование запроса в нижний регистр

Вот мой код вызова:

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

Проблема заключается в том, что когда-нибудь я типа в автозаполнения, он преобразуется в нижний регистр, когда он достигает PHP файла autocomplete.php

Для например, если я ищу «Smart Boy», php-файл получит «умный мальчик». Это хорошо, потому что, когда я делаю подобный поиск в базе данных для запроса, я получаю все соответствующие результаты независимо от случая с буквой.

Но вот проблема, когда я запускаю этот скрипт для греческих символов, например. когда я ввожу запрос «Μικρές Οικιακές Συσκευές», он преобразуется в «μικρές οικιακές συσκευές». Теперь, когда я использую как запрос, как показано ниже:

"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, это даст мне эту ошибку:

Illegal смесь закусок (utf8_general_ci, неявные) и (latin1_general_ci, EXPLICIT) для работы «как»

Только если я могу остановить автозаполнения путем преобразования запроса в нижний регистр, было бы решить эту проблему довольно много.

Почему плагин конвертирует в нижний регистр в любом случае, когда я не указал такую ​​вещь в параметрах для вызова?

Любые идеи ....

ответ

0

я, наконец, нашли решение с помощью функции поиска файлов jquery.autocomplete.js для слова «нижний». Я выяснил, что он преобразует поисковые запросы в нижний регистр, если параметр «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(); ... 

, который дал мне понять, почему это могло быть преобразовывая в нижний регистр.

Возможно, этот ответ поможет кому-то с той же ситуацией.

С уважением

0

Вы можете использовать смешанное соответствие случая ... и на обратном вызове onClickAfter .. у вас есть доступ к исходному пункту с неповрежденными случае.

Например ... если мой набор данных имел атрибут «имя», я могу восстановить его исходное значение с:

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

    var name = item.name; 
    . . . . . 
Смежные вопросы