Показать сообщение отдельно
  #1 (permalink)  
Старый 30.03.2013, 15:03
Аспирант
Отправить личное сообщение для Benos Посмотреть профиль Найти все сообщения от Benos
 
Регистрация: 09.01.2012
Сообщений: 48

[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
и т.д.

Похоже ошибка в установке аттрибута?
Ответить с цитированием