Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.08.2012, 01:57
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

onkeydown при разных раскладках
window.addEventListener('keydown',function(e){aler t(e.keyCode)},false)

например в опере нажимаем «z», если включена русская раскладка то koeyCode будет равно 1071, а при english - 90. можно ли как то идентифицировать клавишу при любых раскладках? если обрабатывать много кнопок то придется делать if(e.keyCode==90 || e.keyCode==1071), ну то есть, есть ли определённое свойство которое не зависит от раскладки, чтобы по нему безошибочно определить какая клавиша была нажата, без лишних движений?
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2012, 02:14
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

e.which
<script>
window.addEventListener('keydown',function(e){alert(e.which)},false)
</script>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2012, 03:00
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

Сообщение от devote Посмотреть сообщение
e.which
<script>
window.addEventListener('keydown',function(e){alert(e.which)},false)
</script>
не знаю, может у меня опера неправильная, но возвращается тоже самое число что и в keyCode.. firefox вообще 0 возвращает при русской раскладке. только в хроме нормально получается.

Последний раз редактировалось trololo, 08.08.2012 в 03:11.
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2012, 11:29
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Это читали http://learn.javascript.ru/keyboard-events
Ответить с цитированием
  #5 (permalink)  
Старый 08.08.2012, 12:06
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

Сообщение от bes Посмотреть сообщение
Это читали http://learn.javascript.ru/keyboard-events
ну вот даже тут ситуация не меняется http://learn.javascript.ru/keyboard-...ydown-и-keyup
Цитата:
Скан-код клавиши одинаков в любой раскладке и в любом регистре. Например, клавиша z может
означать символ "z", "Z" или "я", "Я" в русской раскладке, но её скан-код будет всегда одинаков: 90.
только у меня, почему то, совсем не то отображается в тестовом поле, z=90 я=1071, смотрю в браузере Opera/9.80 (X11; Linux i686; U; ru) Presto/2.10.289 Version/12.00
Ответить с цитированием
  #6 (permalink)  
Старый 08.08.2012, 12:10
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Ну мне не проверить, у меня в 12-й всё ок
Ответить с цитированием
  #7 (permalink)  
Старый 08.08.2012, 12:15
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от trololo
совсем не то отображается в тестовом поле
что за поле, может там чего не так сделали, в исходном примере alert()
Ответить с цитированием
  #8 (permalink)  
Старый 08.08.2012, 15:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script type="text/javascript">

function LatRus(TxtTrans1,a){TxtTrans1=='lat'? TxtTrans1='rus':TxtTrans1='lat';
lat0='qwertyuiopasdfghjkl;\'zxcvbnm\,QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>`~[].'.split('');
lat='qwertyuiopasdfghjkl;\'zxcvbnm\,QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>`~'.split('');
lat.push('\\[');lat.push('\\]');lat.push('\\.');
rus=('йцукенгшщзфывапролджэячсмитьбЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁхъю').split('');
function transF(p){ar1=lat;ar2=rus;if(TxtTrans1=='lat'){ar2=lat0;ar1=rus}for(var i=0; i<ar1.length; i++){trans='/'+ar1[i]+'/gm';p=p.replace(eval(trans), ar2[i])}return p;} return transF(a)}


var a='Z njhjgk.cm e,tuf. yf hf,jne dtxthjv ,ele d bytnt b dc` hfccrf;e gjlhj,ytt\n\
Z тороплюсь e,tuf. на работу dtxthjv буду d bytnt b всё расскажу gjlhj,ytt'


alert(LatRus('lat',a))
</script>


Функция LatRus('rus',text) - будет преобразовывать в латиницу при любой раскладке (букву или фразу
далее через charCodeAt http://javascript.ru/String/charCodeAt

Последний раз редактировалось Deff, 08.08.2012 в 15:19.
Ответить с цитированием
  #9 (permalink)  
Старый 08.08.2012, 15:45
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Deff,
ты немного забыл о том что инет юзают люди не только русские, но и украина например часто посещает русские сайты, да и еще есть некоторые.. поэтому тупой перевод букв на латиницу тут далеко не катит.. А свойство which должно корректно работать, и выдавать нормальный номер клавиши без учета кодировки... об этом четко описано в спецификации:
Цитата:
which holds a system- and implementation-dependent numerical code signifying the unmodified identifier associated with the key pressed. In most cases, the value is identical to keyCode.
дословно:
Сообщение от devote
unmodified identifier associated with the key pressed.
не измененный идентификатор нажатой клавиши
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #10 (permalink)  
Старый 08.08.2012, 15:48
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

devote, неплохо бы ссылочку
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срабатывание скрипта в разные моменты при загрузки в разных браузерах VitalikPro Javascript под браузер 10 29.12.2011 18:24
Выполнить 2 разных действия при одном запросе. Gesandte AJAX и COMET 12 18.12.2011 16:53
Проблема при воспроизведении аудио при использовании jplayer nemish Events/DOM/Window 0 01.12.2011 16:15
getAllResponseHeaders() и status имеют смысл только при readyState==4? mister_maxim AJAX и COMET 7 27.03.2011 19:08
Изменение стиля родительского элемента при :hover дочернего lanzs Элементы интерфейса 2 16.10.2010 13:28