Как сделать автоматическое преобразование латинских символов в кириллицу в 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/>
  • Вопрос задан
  • 6544 просмотра
Решения вопроса 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 с определением кодов нажатых клавиш. Если второе — отправлять на сервер запрос как есть, при необнаружении резалтов делать поиск транслитом
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект