Помощник
|
onKeyPress из подключаемого файла JS |
Лёлик2
|
Сообщение
#1
|
||
|
|
||
|
|||
MetSerp |
13.9.2010, 21:41;
Ответить: MetSerp
Сообщение
#2
|
|
ява скрипт регистрозависимый язык и он не знает что такое onKeyPress зато знает onkeypress.
Упс, не заметил сразу что вы по тегу берете, getElementsByTagName возвращает не объект а массив. Массив не имеет свойства onkeypress потому вам надо обратится непосредственно к элементу массива, например по индексу (в вашем случае 0) либо присвоить body id и брать по нему так как там возвращается объект |
|
|
Лёлик2
|
Сообщение
#3
|
|
ява скрипт регистрозависимый язык и он не знает что такое onKeyPress зато знает onkeypress не заметил сразу что вы по тегу берете, getElementsByTagName возвращает не объект а массив. Массив не имеет свойства onkeypress потому вам надо обратится непосредственно к элементу массива, например по индексу (в вашем случае 0) либо присвоить body id и брать по нему так как там возвращается объект Попробовал и так: document.getElementsByTagName("body")[0].onkeypress=b(event); и так document.getElementsByTagName("body")[0].onkeypress=return b(event); и большими буквами не хочет! |
|
|
MetSerp |
13.9.2010, 23:47;
Ответить: MetSerp
Сообщение
#4
|
|
есть подозрение что проблема в самой функции так как
[PHP]<html> <head> </head> <body> <script> document.getElementsByTagName('body')[0].onkeypress= function(event){ (event.ctrlKey)?alert('yes'):alert('no'); } </script> <textarea></textarea> </body> </html>[/PHP] работает (проверял в хроме), но при этом стандартные сочетания по прежнему выполняют стандартное поведение, т.е. если нажать ctrl + A произойдет выделение всех элементов на странице, а алерт при этом не среагирует |
|
|
Лёлик2
|
Сообщение
#5
|
|
есть подозрение что проблема в самой функции Извините я вас не понял, если вы о функции b то она работает, так как если написать <body onkeypress="return b(event)"> то все блокируется. А вот если это событие определяешь в самом файле JavaScript, а в HTML документе пишешь просто <body> то не работает почему-то! |
|
|
MetSerp |
14.9.2010, 0:32;
Ответить: MetSerp
Сообщение
#6
|
|
немного освежил в голове javascript и вот что получилось[PHP]<html>
<head> </head> <body> <script> function b(event){ var code=event.keyCode||window.event; if (event.ctrlKey){ alert('it\'s work!') // Ctrl+U if (code == 117) return false; if (code == 85) return false; // Ctrl+C if (code == 99) return false; if (code == 67) return false; // Ctrl+A if (code == 97) return false; if (code == 65) return false; } } document.onkeypress= b; </script> <textarea></textarea> </body> </html>[/PHP] реакция происходит (в хроме точно, других браузеров сейчас нет так как я за 1500км от дома) например если нажать ctrl +Z то выскочит alert который и должен выскакивать при любом сочетании с кнопкой ctrl, но на хоткеи хром по прежнему реагирует четко, и видимо это не обойти, так как хоткеи хрома имеют более высокий приоритет над пользовательскими скриптами. Ошибок в вашем скрипте было 2 (помимо названных раннее): 1. При присвоении свойству объекта on+некое_событие скобки необходимо опускать, так как в случае добавления скобок при первом ее вызове через событие произойдет присвоение результата функции и в дальнейшем функция не будет вызываться (хотя тут могу ошибится). 2. тернарный оператор. Почему работало при вызове в html: при вызове из html, содержимое атрибута браузер оборачивает в анонимную функцию, в итоге вышеперечисленные проблеммы отпадали |
|
|
Alcorn |
14.9.2010, 8:13;
Ответить: Alcorn
Сообщение
#7
|
|
Можно покороче -
[PHP] document.onkeydown=function(e) { e=e||window.event; if (e.ctrlKey) {if ((e.keyCode=='85') || (e.keyCode=='67') || (e.keyCode=='65')) return false;} } [/PHP] Вот только Опере на все эти запреты пофиг. |
|
|
Лёлик2
|
Сообщение
#8
|
|
По поводу тернарного оператора:
с вашим вариантом не работает в firefox, начальный вариант работает везде. Остальное: document.onkeypress= b; document.onkeypress=function(event){...); document.onkeydown=function(event){...); не работает вообще либо в опере не работает. А начальный вариант <body onkeypress="return b(event)"> в опере все блокирует! Попробуйте. |
|
|
MetSerp |
14.9.2010, 21:05;
Ответить: MetSerp
Сообщение
#9
|
|
проверил в изначальном варианте в хроме (т.е. с вызовом из html) ему вселенски пофигу, хоткеи работают в любом случае. На опере проверить не могу. По факту, полным аналогом вызова из html является просто оборот функции вашей в анонимную функцию, ну или в целом замещение функции анонимной т.е. так:
[PHP] document.onKeyPress=function (event){ var code=event.keyCode ? event.keyCode : event.which ? event.which : null; if (event.ctrlKey){ // Ctrl+U if (code == 117) return false; if (code == 85) return false; // Ctrl+C if (code == 99) return false; if (code == 67) return false; // Ctrl+A if (code == 97) return false; if (code == 65) return false; } }[/PHP] обращение к тегу тут опущено так как вам по факту интересно любое нажатие кнопки если просто эмулировать поведение браузера то ваш код можно переделать вот так: [PHP]function b(event){ var code=event.keyCode ? event.keyCode : event.which ? event.which : null; if (event.ctrlKey){ // Ctrl+U if (code == 117) return false; if (code == 85) return false; // Ctrl+C if (code == 99) return false; if (code == 67) return false; // Ctrl+A if (code == 97) return false; if (code == 65) return false; } } document.getElementsByTagName("body")[0].onKeyPress=function (){return b(event)}; [/PHP] примерно это и делает браузер с вашим кодом при вызове из тела документа. Возможно вам будет полезно прочесть это |
|
|
Лёлик2
|
Сообщение
#10
|
|
проверил в изначальном варианте в хроме (т.е. с вызовом из html) ему вселенски пофигу, хоткеи работают в любом случае Да на хроме я не поверял, я только на Опере, IE8 и Firefox. Возможно вам будет полезно прочесть это Прочел написано что только два варанта вызова обработчика, вы их указали но они не работают почему-то, я даже просто написал: function ff (event){alert('нажата клавиша');} document.getElementsByTagName("body")[0].onKeyPress=ff; и не появляется alert ни в одном браузере (из моих трех)! Я думаю тему можно закрыть проблема небольшая, буду вызывать с html, я просто не думал что это окажется такой сложный вопрос когда тему создавал. Хотя если кому интересно докопаться до сути то я буду рад выслушать предложения. |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Исправить ошибку при загрузке файла и добавить google recaptcha | 0 | Serg1991 | 3043 | 18.2.2015, 18:21 автор: -Serg1991- |
|
Ищу Копипастера 3р файл картинка+текст+кач файла и закач ко мне на хостинг | 0 | dimka1109 | 3209 | 21.1.2015, 20:13 автор: dimka1109 |
|
Написать скрипт для внесение данных из файла | 1 | andre69 | 1216 | 6.11.2013, 17:35 автор: Slava1988 |
|
Нужна помощь (при тыке на рекламу, скачивание файла). | 0 | Царь | 2601 | 1.9.2013, 16:07 автор: -Царь- |
|
Просмотр рекламы перед скачкой файла | 0 | spudi | 2621 | 28.5.2013, 12:04 автор: -spudi- |
Текстовая версия | Сейчас: 23.4.2024, 12:38 |