[FF+GM] Проверьте пжл. скрипт(не могу найти ошибку)
День добрый!
Сваял скрипт, но что то не пашет(т.е. пашет, но частично) не могу определить где ошибся посмотрите пжл. Буду очень благодарен. Суть задачи. Есть сайт на котором расположены кнопки(тэг 'input'), делаю привязку кнопок сайта к клавиатуре, что бы можно было пользоваться сайтом с ноутбука без мышки(т.к. в дороге с мышкой беда, а тач на дух не переношу). собственно код: // массив горячих клавиш var ArrayKey = [' F1',' F2',' F4',' F8',' F9',' F12']; // массив кодов горячих клавиш var ArrayCodeKey = [112, 113, 115, 119, 120, 123]; // массив текстов кнопок на сайте var ArrayNameBut = ['Вперед', 'Назад', 'Закрыть', 'Открыть', 'Поиск', 'Выйти', 'Добавить', 'Удалить', 'Обновить']; document.getElementById('mainbox').onload = GUI_Key; document.onkeyup = testAlert; // функция переписывает название кнопок и добавления атрибута function GUI_Key(){ var NumButKey = 0; // задаем начальный элемент перебора var ButtomArrayTag = document.getElementById('mainbox').contentWindow.document.getElementsByTagName('input'); for(i=0; i<ButtomArrayTag.length; i++){ for(a=0; a<ArrayNameBut.length; a++){ if(ButtomArrayTag[i].value.toString() == ArrayNameBut[a]){ // определяем название кнопки ButtomArrayTag[i].value = ButtomArrayTag[i].value+ArrayKey[NumButKey]; // переименовываем название кнопки было "Вперед" стало "Вперед F1" и т.д. ButtomArrayTag[i].setAttribute('modid', ArrayCodeKey[NumButKey]); // задаем в код кнопки атрибут по порядковому номеру NumButKey (F1 - 112 и т.д.) NumButKey++; // переход на следующий элемент } } } } // функция обработки нажатой клавиши (при нажатии кнопки проверяем код кнопки и код атрибута, если совпал то кликаем function testAlert(event){ var testId = document.getElementById('mainbox').contentWindow.document.getElementsByTagName('input'); for(i=0; i <testId.length; i++){ if(testId[i].hasAttribute('modid') && testId[i].getAttribute('modid') == event.keyCode){ testId[i].click(); //alert(event.keyCode+' '+testId[i].getAttribute('modid')); } break; } } по факту выходит следующее: 1. Название кнопок переписывается нормально(все кнопки переименовываются как нужно) 2. Вызов кнопок идет не корректно. Всегда вызывается кнопка идущая первая на сайте. При тесте через: alert(event.keyCode+' '+testId[i].getAttribute('modid')); Видно что, атрибут 'modid' всегда постоянный и соответствует первому значению из массива ArrayCodeKey, а именно 112 т.е. при нажатии на любую кнопку видим алерт: При клике F1 112 112 При клике F2 113 112 и т.д. Похоже ошибка в установке аттрибута? |
А к чему все эти пляски с какими-то непонятными атрибутами?
var keyCodes = { 112 : 'F1', 113 : 'F2', .. } var buttonKeys = { 'Вперед' : 'F1', 'Назад' : 'F2', .. } // сопоставляет клавиши (F1, F2, ..) элементам var keyMap = {}; var buttons = document.getElementsByTagName('input'); for (var i = 0, button; button = buttons[i]; i++) { if (button.value in buttonKeys) { // меняем надпись .. // {'F1': this, ..} keyMap[ buttonKeys[button.value] ] = this; } } document.onkeydown = function(e) { var key = keyCodes[e.keyCode]; if (key in keyMap) { var target = keyMap[key]; target.click(); } } Кстати, события из фрейма не всплывают в родительский документ, если что. |
Цитата:
можно в ручную перебрать все... но это муторно и код будет большой... думал избежать этого... а для вызова нужной кнопки хотел задать атрибиты(для простоты хотел атрибут задать по коду кнопки)... вот тут и возник косяк... Цитата:
|
Цитата:
Цитата:
Нашел нужный элемент - запомнил его в каком-нибудь массиве. Верней в хэш-таблице. Затем по нажатию клавишы получаешь нужный элемент (или массив элементов), привязанный к нажатой клавишей. Причем без всяких переборов - просто по ключу. |
еще бы было бы где нормально описано про Хеш массивы...
смутно представляю структуру... { ключ : элемент , ... } так ? Можно собрать хэш массив таким образом? HashBut[ArrayCodeKey[NumButKey]] = ButtomArrayTag[i]; |
Часовой пояс GMT +3, время: 23:20. |