Задать вопрос

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

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
23 янв. 2025, в 09:18
10000 руб./за проект
23 янв. 2025, в 04:47
10000 руб./за проект