Как сделать автоматическое преобразование латинских символов в кириллицу в jquery.autocomplete?

Доброго времени суток.



Подскажите, пожалуйста, как «прокачать» jquery autocomplete так, чтобы латинские символы автоматически преобразовывались в кириллицу? Вот пример — когда пользователь вводит «vjc», в результатах выводится «Москва».



Я добавил несколько строк в скрипт выдачи результатов (см. ниже), но он не работает — если вызвать скрипт с параметром q, выдаются корректные результаты, но в форме выдаётся пустой список.



Подскажите, пожалуйста, в чём может быть дело? Заранее спасибо.



&lt;?php<br/>
include(&quot;config.php&quot;); <br/>
<br/>
function translit($str) <br/>
{<br/>
 $tr = array(<br/>
 &quot;q&quot;=&gt;&quot;й&quot;,&quot;w&quot;=&gt;&quot;ц&quot; //.. и так далее<br/>
 );<br/>
 return strtr($str,$tr);<br/>
}<br/>
<br/>
$q = '';<br/>
if (isset($_GET['q'])) {<br/>
<br/>
$q = strtolower($_GET['q']);<br/>
 $q = iconv('UTF-8','WINDOWS-1251', $q);<br/>
 $q = translit($q);<br/>
 <br/>
 $query = &quot;SELECT * FROM cities WHERE name_rus LIKE '%$q%' ORDER BY name_rus ASC&quot;; <br/>
 $res = mysql_query($query);<br/>
 if(mysql_num_rows($res)&gt;0){ <br/>
 while($row = mysql_fetch_assoc($res)){ <br/>
 $name[] = $row['name_rus']; <br/>
 }<br/>
 }<br/>
 <br/>
}<br/>
<br/>
if (count($items) &lt;&gt; 0){<br/>
 foreach ($name as $curr) {<br/>
 echo &quot;$curr\n&quot;;<br/>
 }<br/>
}<br/>
<br/>
if (!$q) {<br/>
 return;<br/>
}<br/>
  • Вопрос задан
  • 6036 просмотров
Решения вопроса 1
Insa88
@Insa88
Отлавливайте ввод символов в самом поле и налету меняйте латиницу на русский (средствами того же Jquery), т.е. запрос сразу будет на русском, т.к. обработка произойдет на стороне клиента.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@FATius
///Распознаем нажатие клавиши с английской буквой и переводим на русс.
var mapKey = {
'q' : 'й', 'w' : 'ц', 'e' : 'у', 'r' : 'к', 't' : 'е', 'y' : 'н', 'u' : 'г', 'i' : 'ш', 'o' : 'щ', 'p' : 'з', '[' : 'х', ']' : 'ъ', 'a' : 'ф', 's' : 'ы', 'd' : 'в', 'f' : 'а', 'g' : 'п', 'h' : 'р', 'j' : 'о', 'k' : 'л', 'l' : 'д', ';' : 'ж', '\'' : 'э', 'z' : 'я', 'x' : 'ч', 'c' : 'с', 'v' : 'м', 'b' : 'и', 'n' : 'т', 'm' : 'ь', ',' : 'б', '.' : 'ю','Q' : 'Й', 'W' : 'Ц', 'E' : 'У', 'R' : 'К', 'T' : 'Е', 'Y' : 'Н', 'U' : 'Г', 'I' : 'Ш', 'O' : 'Щ', 'P' : 'З', '[' : 'Х', ']' : 'Ъ', 'A' : 'Ф', 'S' : 'Ы', 'D' : 'В', 'F' : 'А', 'G' : 'П', 'H' : 'Р', 'J' : 'О', 'K' : 'Л', 'L' : 'Д', ';' : 'Ж', '\'' : 'Э', 'Z' : '?', 'X' : 'ч', 'C' : 'С', 'V' : 'М', 'B' : 'И', 'N' : 'Т', 'M' : 'Ь', ',' : 'Б', '.' : 'Ю',
};

$("#idinput").on('keyup', function () {
var str = $("#idinput").val();
var r = '';
for (var i = 0; i < str.length; i++) {
r += mapKey[str.charAt(i)] || str.charAt(i);
}
// $("#idinput").val(r).trigger('keydown');
// Тригерр, если это поле ввода для другого плагина, например autocomplete
$("#idinput").val(r);
});
///Распознаем нажатие клавиши с английской буквой и переводим на русс.
Ответ написан
Вам нужно, чтобы преобразование происходило безусловно, или только если получается какая-то фигня?
Если первое — то лучше на стороне клиента, копайте в сторону onkeydown с определением кодов нажатых клавиш. Если второе — отправлять на сервер запрос как есть, при необнаружении резалтов делать поиск транслитом
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы