Автор
Сообщение
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Сб Апр 30, 2005 12:15 am (написано за 3 минуты 4 секунды )
Заголовок сообщения: Хоткеи
Моя реализация хоткеев: считывает атрибут accesskey со всех ссылок и инпутов, и создает хоткеи Ctrl+key. Может: 1. Создовать хотхеи функцией addHotKey('ид элемента', код символа) (срабатывает без Ctrl) 2. Удалять хоткеи функцией remHotKey(код символа) 3. Создавать "одноразовые" хоткеи (срабатывают только один раз) oneHotKey('ид элемента', код символа) Проверено в IE 6.0, Firefox 1.0.3, Opera 7.54 Известные ошибки: 1. В Опере вместе с хоткеями срабатывают дефолтные хоткеи броузера. Пока не знаю как исправить. Жду поправок и комментариев. Давайте вместе доведем до ума.
Код (JavaScript ):
скопировать код в буфер обмена
var isDOM=document.getElementById var isHB=isDOM&&document.all var isMZ=isDOM&&navigator.appName =="Netscape" window.onload = function ( ) { loadHotKeys( ) } var hotKeys=[ ] ;var oneHotKeys=[ ] ;function loadHotKeys( ) { if ( a=document.getElementsByTagName ( 'a' ) ) { for ( i=0 ;i<a.length ;i++) { if ( accesskey=a[ i] .accessKey ) hotKeys[ accesskey] =a[ i] ;} input=document.getElementsByTagName ( 'input' ) ;for ( i=0 ;i<input.length ;i++) { if ( accesskey=input[ i] .accessKey ) hotKeys[ accesskey] =input[ i] ;} ;} ;} if ( isHB) { document.onkeydown =function ( ) { return hotKey( event) } } else if ( isMZ) { document.addEventListener ( "keypress" ,function ( ev) { hotKey( ev) } ,true ) ; document.addEventListener ( "keyup" ,function ( ev) { hotKey( ev) } ,true ) ;} function hotKey( event) { key=event.keyCode ;if ( key==0 ) key=event.charCode ;if ( event.ctrlKey ) { letter=String.fromCharCode ( key) .toLowerCase ( ) ;if ( hotKeys[ letter] ) return _doHotKey( hotKeys[ letter] ,event) ;} else if ( hotKeys[ key] ) { _doHotKey( hotKeys[ key] ,event) ;if ( oneHotKeys[ key] ) { remHotKey( key) ; oneHotKeys[ key] =null ;} ;return false ;} ;} function _doHotKey( object,event) { if ( isMZ) { event.cancelBubble = true ; event.preventDefault ( ) ; event.stopPropagation ( ) ;if ( object.onclick ) object.onclick ( ) ;else window.location =object.href ;} else if ( isHB) { object.click ( ) ;return false ;} ;} function addHotKey( id,key) { if ( document.getElementById ( id) &&key) { hotKeys[ key] =document.getElementById ( id) ;return true ;} else { alert ( 'ERROR: Id или Key не существует' ) ;return false ;} ;} function remHotKey( key) { if ( hotKeys[ key] ) hotKeys[ key] =null ;else return false ;} function oneHotKey( id,key) { if ( addHotKey( id,key) ) oneHotKeys[ key] =true ;}
Вернуться к началу
Евгений Галашин
Модератор
Зарегистрирован: 29.12.2003
Сообщ.: 1862
Карма: 30 поощрить /наказать
Добавлено : Сб Апр 30, 2005 8:32 am (спустя 8 часов 16 минут ; написано за 22 секунды )
Заголовок сообщения:
Ivan Shumkov писал(а):
Давайте вместе доведем до ума.
Давайте для начала отформатируем код с отступами (-;
Вернуться к началу
Миша Спларов
Участник форума
Зарегистрирован: 17.11.2003
Сообщ.: 799
Карма: 63 поощрить /наказать
Откуда: Россия, Томск
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Сб Апр 30, 2005 1:37 pm (спустя 3 часа 37 минут ; написано за 4 минуты 7 секунд )
Заголовок сообщения:
Евгений Галашин
Хорошо :). Так храню код только для уменьшения размера файла. Немного подправил код, но с ошибкой Opera не справиться.
Код (JavaScript ):
скопировать код в буфер обмена
var isDOM=document.getElementById var isHB=isDOM&&document.all var isOpera=window.opera &&isDOMvar isMZ=isDOM&&navigator.appName =="Netscape" window.onload = function ( ) { loadHotKeys( ) } var hotKeys=[ ] ;var oneHotKeys=[ ] ;function loadHotKeys( ) { if ( a=document.getElementsByTagName ( 'a' ) ) { for ( i=0 ;i<a.length ;i++) { if ( accesskey=a[ i] .accessKey ) hotKeys[ accesskey] =a[ i] ; } input=document.getElementsByTagName ( 'input' ) ; for ( i=0 ;i<input.length ;i++) { if ( accesskey=input[ i] .accessKey ) hotKeys[ accesskey] =input[ i] ; } ; } ;} if ( isHB) { document.onkeydown =function ( ) { return hotKey( event) } } else if ( isMZ) { document.addEventListener ( "keypress" ,function ( ev) { hotKey( ev) } ,true ) ; document.addEventListener ( "keyup" ,function ( ev) { hotKey( ev) } ,true ) ;} function hotKey( event) { key=event.keyCode ; if ( key==0 ) key=event.charCode ; if ( event.ctrlKey ) { letter=String.fromCharCode ( key) .toLowerCase ( ) ; if ( hotKeys[ letter] ) return _doHotKey( hotKeys[ letter] ,event) ; } else if ( hotKeys[ key] ) { _doHotKey( hotKeys[ key] ,event) ; if ( oneHotKeys[ key] ) { remHotKey( key) ; oneHotKeys[ key] =null ; } ; return false ; } ;} function _doHotKey( object,event) { if ( isMZ) { event.preventDefault ( ) ; if ( object.onclick ) object.onclick ( ) ; else window.location =object.href ; } else if ( isHB) { if ( isOpera) event.preventDefault ( ) ; object.click ( ) ; if ( isIE) return false ; } ;} function addHotKey( id,key) { if ( document.getElementById ( id) &&key) { hotKeys[ key] =document.getElementById ( id) ; return true ; } else { alert ( 'ERROR: Id или Key не существует' ) ; return false ; } ;} function remHotKey( key) { if ( hotKeys[ key] ) hotKeys[ key] =null ; else return false ;} function oneHotKey( id,key) { if ( addHotKey( id,key) ) oneHotKeys[ key] =true ;}
Вернуться к началу
Дмитрий Кóтеров
Администратор
Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить /наказать
Добавлено : Чт Мая 05, 2005 4:08 pm (спустя 5 дней 2 часа 31 минуту ; написано за 23 секунды )
Заголовок сообщения:
М
Ivan Shumkov писал(а):
Давайте вместе доведем до ума.
Уверены, что этому коду место в "Готовых решениях"? Вы его на каком-нибудь своем проекте применяете?
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Чт Мая 05, 2005 10:08 pm (спустя 6 часов 1 секунду ; написано за 59 секунд )
Заголовок сообщения:
Дмитрий Кóтеров
Делаю редизайн для geometria.ru, там и планирую использовать. zone.geometria.ru/html
Вернуться к началу
Гость
Карма: 367 поощрить /наказать
Добавлено : Пт Июн 03, 2005 7:12 pm (спустя 28 дней 21 час 3 минуты ; написано за 10 минут 27 секунд )
Заголовок сообщения:
Оформил в виде класса. Изменил функцию добавления хоткея. Инициализация
Скрипт пробегает по странице и собирает у ссылок и инпутов атрибуты accesskey. Значения атрибутов становятся хоткеями. Тоесть Ctrl+accesskey. Создать хоткей:
Первый параметр обьект (кнопка, ссылка или любой другой объект с onclick), либо функция. Второй параметри код кнопки. В данном случае Esc. Создать хоткей, который сработает только один раз:
Параметры такие же как и у функции Add. Удалить хоткей
Параметр - код клавиши на котором был хоткей. Вот сам класс:
Код (JavaScript ):
скопировать код в буфер обмена
var isDOM=document.getElementById var isHB=isDOM&&document.all var isOpera=window.opera &&isDOMvar isMZ=isDOM&&navigator.appName =="Netscape" function Hotkey( ) { var hotKeys = [ ] ; var oneHotKeys = [ ] ; var a = document.getElementsByTagName ( 'a' ) ; if ( a) { for ( var i = 0 ; i < a.length ; i++) { var accesskey = a[ i] .accessKey ; if ( accesskey) hotKeys[ accesskey] = a[ i] ; } var input = document.getElementsByTagName ( 'input' ) ; for ( var i = 0 ; i < input.length ; i++) { var accesskey = input[ i] .accessKey ; if ( accesskey) hotKeys[ accesskey] = input[ i] ; } } if ( isHB) document.onkeydown = function ( ) { return KeyDown( event) } else if ( isMZ) document.addEventListener ( "keypress" , function ( ev) { KeyDown( ev) } , true ) ; function KeyDown( event) { var key = event.keyCode || event.charCode ; if ( event.ctrlKey ) { var letter = String.fromCharCode ( key) .toLowerCase ( ) ; if ( hotKeys[ letter] ) return Do ( hotKeys[ letter] , event) ; } else if ( hotKeys[ key] ) { Do ( hotKeys[ key] , event) ; if ( oneHotKeys[ key] ) { Rem( key) ; oneHotKeys[ key] = null ; } return false ; } } function Do ( object, event) { if ( typeof object == 'function' ) { object( ) ; } else { if ( isMZ) { event.preventDefault ( ) ; if ( object.onclick ) object.onclick ( ) ; else window.location = object.href ; } else if ( isHB) { if ( isOpera) event.preventDefault ( ) ; object.click ( ) ; if ( isIE) return false ; } } } this .Add = function ( obj, key) { if ( typeof obj == 'function' || typeof obj == 'object' ) { hotKeys[ key] = obj; return true ; } else { alert ( 'ERROR: Установить можно только объект или функцию.' ) ; return false ; } } Rem = this .Rem = function ( key) { if ( hotKeys[ key] ) hotKeys[ key] = null ; else return false ; } this .One = function ( id, key) { if ( this .Add ( id, key) ) oneHotKeys[ key] =true ; } }
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Пт Июн 03, 2005 7:22 pm (спустя 10 минут ; написано за 25 секунд )
Заголовок сообщения:
Ой, простите, забыл залогиниться.
Вернуться к началу
reuse
Заглянувший
Зарегистрирован: 09.06.2005
Сообщ.: 4
Карма: -1 поощрить /наказать
Добавлено : Чт Июн 09, 2005 9:52 am (спустя 5 дней 14 часов 29 минут ; написано за 3 минуты 11 секунд )
Заголовок сообщения: Выловлена ошибка
Удобно использовать это решение. Легко прикручивается. Но найдена ошибка. Инициализация осуществлялась:
Цитата:
Скрипт пробегает по странице и собирает у ссылок и инпутов атрибуты accesskey. Значения атрибутов становятся хоткеями. Тоесть Ctrl+accesskey.
После чего, заполняя данные форм, при нажатии клавиши Backspace, браузер возвращался на предыдущую страницу, т.е. срабатывала "Back". Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Чт Июн 09, 2005 12:17 pm (спустя 2 часа 25 минут ; написано за 1 минуту 8 секунд )
Заголовок сообщения:
reuse писал(а):
window.onload = function() { var myHotkey = new Hotkey; }
Спасибо! Опечатался, надо без var. Иначе в глобальной видимости не видно myHotkey. Инициализация:
Вернуться к началу
reuse
Заглянувший
Зарегистрирован: 09.06.2005
Сообщ.: 4
Карма: -1 поощрить /наказать
Добавлено : Чт Июн 09, 2005 12:48 pm (спустя 30 минут ; написано за 2 минуты 15 секунд )
Заголовок сообщения:
Ivan Shumkov писал(а):
Опечатался, надо без var
Это не решает проблемы с клавишей Backspace и возвратом на предыдущую страницу, при редактировании полей в форме.
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Чт Июн 09, 2005 12:55 pm (спустя 6 минут ; написано за 35 секунд )
Заголовок сообщения:
reuse
Хм. Пробывал в Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/20050414 Firefox/1.0.3 Все отлично работает. Вы не могли бы выложить вашу страницу в интернет?
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Пт Июн 10, 2005 3:10 am (спустя 14 часов 15 минут ; написано за 22 секунды )
Заголовок сообщения:
reuse
Поставил Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4 как и у вас. Проблемы с клавищей Backspace не наблюдаю.
Вернуться к началу
reuse
Заглянувший
Зарегистрирован: 09.06.2005
Сообщ.: 4
Карма: -1 поощрить /наказать
Добавлено : Пт Июн 10, 2005 8:26 am (спустя 5 часов 15 минут ; написано за 1 минуту 19 секунд )
Заголовок сообщения:
Ivan Shumkov
Сейчас я проверю на обычной странице. Backspace срабатывает в системе управления продажами. Возможно был конфликт с чем-то.
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Пт Июн 10, 2005 1:07 pm (спустя 4 часа 41 минуту ; написано за 57 секунд )
Заголовок сообщения:
reuse
Я думаю что конфликт. Я проверил на всех элементах форм и не увидел подобной ошибки.
Вернуться к началу
reuse
Заглянувший
Зарегистрирован: 09.06.2005
Сообщ.: 4
Карма: -1 поощрить /наказать
Добавлено : Пн Июн 13, 2005 9:19 am (спустя 2 дня 20 часов 12 минут ; написано за 1 минуту 24 секунды )
Заголовок сообщения:
Ivan Shumkov
Да, точно конфликт. Прошу прощения за ложную тревогу. Будем разбираться в чем проблема.
Вернуться к началу
kukutz
Заглянувший
Зарегистрирован: 19.02.2005
Сообщ.: 5
Карма: 1 поощрить /наказать
Добавлено : Пн Июн 13, 2005 3:51 pm (спустя 6 часов 31 минуту ; написано за 2 минуты 35 секунд )
Заголовок сообщения:
Чтобы отменить дефолтное поведение клавиш в Опере (например, в восьмой), нужно: 1. вешать обработчика на onkeypress 2. в нём делать
e - обьект события. Возможно, какие-то из строк лишние, в моём коде для всех трёх браузеров это выглядит так:
Код (JavaScript ):
скопировать код в буфер обмена
if ( isMZ || isO8) { e.cancelBubble = true ; e.preventDefault ( ) ; e.stopPropagation ( ) ; } e.returnValue = false ; return false ;
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Пн Июн 13, 2005 4:43 pm (спустя 52 минуты ; написано за 7 минут 23 секунды )
Заголовок сообщения:
kukutz
Спасибо большое. Ошибка с дефолтными клавишами Оперы исправлена. Подчистил код. reuse , попробуйте этот код. Вроде не должно быть конфликтов. Исправленный код:
Код (JavaScript ):
скопировать код в буфер обмена
function Hotkey( ) { var hotKeys = [ ] ; var oneHotKeys = [ ] ; var a = document.getElementsByTagName ( 'a' ) ; var input = document.getElementsByTagName ( 'input' ) ; if ( a) { for ( var i = 0 ; i < a.length ; i++) { var accesskey = a[ i] .accessKey ; if ( accesskey) hotKeys[ accesskey] = a[ i] ; } } if ( input) { for ( var i = 0 ; i < input.length ; i++) { var accesskey = input[ i] .accessKey ; if ( accesskey) hotKeys[ accesskey] = input[ i] ; } } if ( isIE) document.attachEvent ( 'onkeydown' , function ( ) { return KeyDown( event) } ) ; else document.addEventListener ( 'keypress' , function ( ev) { KeyDown( ev) } , true ) ; function KeyDown( event) { var key = event.keyCode || event.charCode ; if ( event.ctrlKey ) { var letter = String.fromCharCode ( key) .toLowerCase ( ) ; if ( hotKeys[ letter] ) return Do ( hotKeys[ letter] , event) ; } else if ( hotKeys[ key] ) { Do ( hotKeys[ key] , event) ; if ( oneHotKeys[ key] ) { Rem( key) ; oneHotKeys[ key] = null ; } return false ; } } function Do ( object, event) { if ( typeof object == 'function' ) object( ) ; else { if ( isIE) object.click ( ) ; else { event.cancelBubble = true ; event.preventDefault ( ) ; event.stopPropagation ( ) ; if ( object.onclick ) object.onclick ( ) ; else window.location = object.href ; } event.returnValue = false ; return false ; } } this .Add = function ( obj, key) { if ( typeof obj == 'function' || typeof obj == 'object' ) { hotKeys[ key] = obj; return true ; } else { alert ( 'ERROR: Установить можно только объект или функцию.' ) ; return false ; } } Rem = this .Rem = function ( key) { if ( hotKeys[ key] ) hotKeys[ key] = null ; else return false ; } this .One = function ( id, key) { if ( this .Add ( id, key) ) oneHotKeys[ key] =true ; } }
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Ср Авг 10, 2005 6:21 am (спустя 1 месяц 26 дней 13 часов 37 минут ; написано за 48 секунд )
Заголовок сообщения:
Запуск:
Код (JavaScript ):
скопировать код в буфер обмена
/* Hotkey, v. 1.1 (c) 2005, Ivan Shumkov (ivan@shumkov.ru) */ ( Hotkey = { hotKeys : [ ] , oneHotKeys : [ ] , Init : function ( $a, $input) { var a = document.getElementsByTagName ( 'a' ) ; var input = document.getElementsByTagName ( 'input' ) ; if ( a) { for ( var i = 0 ; i < a.length ; i++) { var accesskey = a[ i] .accessKey ; if ( accesskey) Hotkey.hotKeys [ accesskey] = a[ i] ; alert ( 1 ) ; } } if ( input) { for ( var i = 0 ; i < input.length ; i++) { var accesskey = input[ i] .accessKey ; if ( accesskey) Hotkey.hotKeys [ accesskey] = input[ i] ; alert ( 2 ) ; } } if ( window.isIE ) document.attachEvent ( 'onkeydown' , function ( ) { return Hotkey.KeyDown ( event) } ) ; else document.addEventListener ( 'keypress' , function ( ev) { Hotkey.KeyDown ( ev) } , true ) ; } , KeyDown : function ( event) { var key = event.keyCode || event.charCode ; if ( event.ctrlKey ) { var letter = String.fromCharCode ( key) .toLowerCase ( ) ; if ( Hotkey.hotKeys [ letter] ) return Hotkey.Do ( Hotkey.hotKeys [ letter] , event) ; } else if ( Hotkey.hotKeys [ key] ) { Hotkey.Do ( Hotkey.hotKeys [ key] , event) ; if ( Hotkey.oneHotKeys [ key] ) { Hotkey.Rem ( key) ; Hotkey.oneHotKeys [ key] = null ; } return false ; } } , Do : function ( object, event) { if ( typeof object == 'function' ) object( ) ; else { if ( window.isIE ) object.click ( ) ; else { event.cancelBubble = true ; event.preventDefault ( ) ; event.stopPropagation ( ) ; if ( object.onclick ) object.onclick ( ) ; else window.location = object.href ; } event.returnValue = false ; return false ; } } , Add : function ( obj, key) { if ( typeof obj == 'function' || typeof obj == 'object' ) { Hotkey.hotKeys [ key] = obj; return true ; } else { alert ( 'ERROR: Установить можно только объект или функцию.' ) ; return false ; } } , Rem : function ( key) { if ( Hotkey.hotKeys [ key] ) Hotkey.hotKeys [ key] = null ; else return false ; } , One : function ( id, key) { if ( Hotkey.Add ( id, key) ) Hotkey.oneHotKeys [ key] =true ; } } ) ( ) ;
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Ср Авг 10, 2005 7:24 am (спустя 1 час 2 минуты ; написано за 43 секунды )
Заголовок сообщения:
Прошу прощения, вот исправленная:
Код (JavaScript ):
скопировать код в буфер обмена
/* Hotkey, v. 1.1 (c) 2005, Ivan Shumkov (ivan@shumkov.ru) */ ( Hotkey = { hotKeys : [ ] , oneHotKeys : [ ] , Init : function ( $a, $input) { var a = document.getElementsByTagName ( 'a' ) ; var input = document.getElementsByTagName ( 'input' ) ; if ( a) { for ( var i = 0 ; i < a.length ; i++) { var accesskey = a[ i] .accessKey ; if ( accesskey) Hotkey.hotKeys [ accesskey] = a[ i] ; } } if ( input) { for ( var i = 0 ; i < input.length ; i++) { var accesskey = input[ i] .accessKey ; if ( accesskey) Hotkey.hotKeys [ accesskey] = input[ i] ; } } if ( window.isIE ) document.attachEvent ( 'onkeydown' , function ( ) { return Hotkey.KeyDown ( event) } ) ; else document.addEventListener ( 'keypress' , function ( ev) { Hotkey.KeyDown ( ev) } , true ) ; } , KeyDown : function ( event) { var key = event.keyCode || event.charCode ; if ( event.ctrlKey ) { var letter = String.fromCharCode ( key) .toLowerCase ( ) ; if ( Hotkey.hotKeys [ letter] ) return Hotkey.Do ( Hotkey.hotKeys [ letter] , event) ; } else if ( Hotkey.hotKeys [ key] ) { Hotkey.Do ( Hotkey.hotKeys [ key] , event) ; if ( Hotkey.oneHotKeys [ key] ) { Hotkey.Rem ( key) ; Hotkey.oneHotKeys [ key] = null ; } return false ; } } , Do : function ( object, event) { if ( typeof object == 'function' ) object( ) ; else { if ( window.isIE ) object.click ( ) ; else { event.cancelBubble = true ; event.preventDefault ( ) ; event.stopPropagation ( ) ; if ( object.onclick ) object.onclick ( ) ; else window.location = object.href ; } event.returnValue = false ; return false ; } } , Add : function ( obj, key) { if ( typeof obj == 'function' || typeof obj == 'object' ) { Hotkey.hotKeys [ key] = obj; return true ; } else { alert ( 'ERROR: Установить можно только объект или функцию.' ) ; return false ; } } , Rem : function ( key) { if ( Hotkey.hotKeys [ key] ) Hotkey.hotKeys [ key] = null ; else return false ; } , One : function ( id, key) { if ( Hotkey.Add ( id, key) ) Hotkey.oneHotKeys [ key] =true ; } } ) ;
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Вт Окт 11, 2005 12:18 am (спустя 2 месяца 16 часов 54 минуты ; написано за 14 секунд )
Заголовок сообщения:
Код (JavaScript ):
скопировать код в буфер обмена
/* Hotkey, v. 1.2 (c) 2005, Ivan Shumkov (ivan@shumkov.ru) */ ( Hotkey = { hotKeys : [ ] , oneHotKeys : [ ] , Init : function ( $a, $input) { var a = document.getElementsByTagName ( 'a' ) ; var input = document.getElementsByTagName ( 'input' ) ; if ( a) { for ( var i = 0 ; i < a.length ; i++) { var accesskey = a[ i] .accessKey ; if ( accesskey) Hotkey.hotKeys [ accesskey] = a[ i] ; } } if ( input) { for ( var i = 0 ; i < input.length ; i++) { var accesskey = input[ i] .accessKey ; if ( accesskey) Hotkey.hotKeys [ accesskey] = input[ i] ; } } if ( window.isIE ) document.attachEvent ( 'onkeydown' , function ( ) { return Hotkey.KeyDown ( event) } ) ; else document.addEventListener ( 'keypress' , function ( ev) { Hotkey.KeyDown ( ev) } , true ) ; } , KeyDown : function ( event) { var key = event.keyCode || event.charCode ; if ( event.ctrlKey ) { var letter = String.fromCharCode ( key) .toLowerCase ( ) ; if ( Hotkey.hotKeys [ letter] ) return Hotkey.Do ( Hotkey.hotKeys [ letter] , event) ; } else if ( Hotkey.hotKeys [ key] ) { Hotkey.Do ( Hotkey.hotKeys [ key] , event) ; if ( Hotkey.oneHotKeys [ key] ) { Hotkey.Rem ( key) ; Hotkey.oneHotKeys [ key] = null ; } return false ; } } , Do : function ( object, event) { if ( typeof object == 'function' ) object( ) ; else { if ( window.isIE ) object.click ( ) ; else { event.cancelBubble = true ; event.preventDefault ( ) ; event.stopPropagation ( ) ; if ( object.nodeName == 'INPUT' ) object.click ( ) ; else if ( object.onclick ) object.onclick ( ) ; else window.location = object.href ; } event.returnValue = false ; return false ; } } , Add : function ( obj, key) { if ( typeof obj == 'function' || typeof obj == 'object' ) { Hotkey.hotKeys [ key] = obj; return true ; } else { alert ( 'ERROR: Установить можно только объект или функцию.' ) ; return false ; } } , Rem : function ( key) { if ( Hotkey.hotKeys [ key] ) Hotkey.hotKeys [ key] = null ; else return false ; } , One : function ( id, key) { if ( Hotkey.Add ( id, key) ) Hotkey.oneHotKeys [ key] =true ; } } ) ;
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Чт Dec 29, 2005 8:31 pm (спустя 2 месяца 18 дней 20 часов 13 минут ; написано за 17 секунд )
Заголовок сообщения:
Код (JavaScript ):
скопировать код в буфер обмена
/* Hotkey, v. 1.7 (c) 2005, Ivan Shumkov (ivan@shumkov.ru) */ ( Hotkey = { _hotKeys : { } , _oneHotKeys : { } , hotElements : [ 'a' , 'input' ] , Init : function ( ) { for ( i = 0 ; i < this .hotElements .length ;i++) { var e = document.getElementsByTagName ( this .hotElements [ i] ) ; if ( e) for ( var i = 0 ; i < e.length ; i++) if ( e[ i] .accessKey ) this .Add ( e[ i] , e[ i] .accessKey ) ; } if ( document.attachEvent ) document.attachEvent ( 'onkeydown' , function ( ) { return Hotkey.KeyDown ( event) } ) ; else document.addEventListener ( 'keypress' , function ( ev) { Hotkey.KeyDown ( ev) } , true ) ; } , Add : function ( obj, key, keycode) { if ( typeof ( obj) == 'function' || typeof ( obj) == 'object' ) { if ( !keycode) key = key.charCodeAt ( ) this ._hotKeys[ key] = obj; return key; } else return false ; } , AddOne : function ( object, key, keycode) { mKey = this .Add ( object, key, keycode) ; if ( mKey) this ._oneHotKeys[ mKey] =true ; } , Rem : function ( key) { if ( this ._hotKeys[ key] ) { delete this ._hotKeys[ key] ; if ( this ._oneHotKeys[ key] ) delete this ._oneHotKeys[ key] ; return true ; } else return false ; } , KeyDown : function ( event) { if ( event.ctrlKey ) { var key = event.keyCode || event.charCode ; if ( this ._hotKeys[ key] ) { if ( typeof ( this ._hotKeys[ key] ) == 'function' ) this ._hotKeys[ key] ( ) ; else { if ( window.isIE ) this ._hotKeys[ key] .click ( ) ; else { event.cancelBubble = true ; event.preventDefault ( ) ; event.stopPropagation ( ) ; if ( this ._hotKeys[ key] .nodeName == 'INPUT' ) this ._hotKeys[ key] .click ( ) ; else if ( this ._hotKeys[ key] .onclick ) this ._hotKeys[ key] .onclick ( ) ; else window.location = object.href ; } event.returnValue = false ; } if ( this ._oneHotKeys[ key] ) this .Rem ( key) ; return false ; } } } } ) ;
Вернуться к началу
Иван Шумков
Участник форума
Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить /наказать
Откуда: Россия, Санкт-Петербург
Добавлено : Сб Апр 08, 2006 8:00 pm (спустя 3 месяца 9 дней 23 часа 29 минут ; написано за 9 секунд )
Заголовок сообщения: 1.8
Код (JavaScript ):
скопировать код в буфер обмена
/* Hotkey, v. 1.8 (c) 2005, Ivan Shumkov (ivan@shumkov.ru) */ ( Hotkey = { _hotKeys : { } , _oneHotKeys : { } , hotElements : [ 'a' , 'input' ] , Init : function ( ) { for ( i = 0 ; i < this .hotElements .length ;i++) { var e = document.getElementsByTagName ( this .hotElements [ i] ) if ( e) for ( var k = 0 ; k < e.length ; k++) if ( e[ k] .accessKey ) this .Add ( e[ k] , e[ k] .accessKey ) } if ( document.attachEvent ) document.attachEvent ( 'onkeydown' , function ( ) { return Hotkey.KeyDown ( event) } ) else document.addEventListener ( 'keypress' , function ( ev) { Hotkey.KeyDown ( ev) } , true ) } , Add : function ( obj, key, keycode) { if ( typeof ( obj) == 'function' || typeof ( obj) == 'object' ) { if ( !keycode) key = key.charCodeAt ( ) this ._hotKeys[ key] = obj return key } else return false } , AddOne : function ( object, key, keycode) { mKey = this .Add ( object, key, keycode) if ( mKey) this ._oneHotKeys[ mKey] =true } , Rem : function ( key) { if ( this ._hotKeys[ key] ) { delete this ._hotKeys[ key] if ( this ._oneHotKeys[ key] ) delete this ._oneHotKeys[ key] return true } else return false } , KeyDown : function ( event) { if ( event.ctrlKey ) { var key = event.keyCode ? event.keyCode + 32 : event.charCode if ( this ._hotKeys[ key] ) { if ( typeof ( this ._hotKeys[ key] ) == 'function' ) this ._hotKeys[ key] ( ) else { if ( this ._hotKeys[ key] .click ) this ._hotKeys[ key] .click ( ) else { if ( this ._hotKeys[ key] .nodeName == 'INPUT' ) this ._hotKeys[ key] .click ( ) else if ( this ._hotKeys[ key] .onclick ) this ._hotKeys[ key] .onclick ( ) else window.location = object.href } if ( event.preventDefault ) { event.returnValue = false event.cancelBubble = true event.preventDefault ( ) event.stopPropagation ( ) } } if ( this ._oneHotKeys[ key] ) this .Rem ( key) return false } } } } ) ;
Вернуться к началу
Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать в опросах. Вы не можете прилагать файлы к сообщениям. Вы можете скачивать файлы.
Powered by
phpBB .
© 2001, 2005 phpBB Group