Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   keyCode charCode (https://javascript.ru/forum/css-html-browser/3505-keycode-charcode.html)

MaxPayne 27.04.2009 21:56

keyCode charCode
 
function keymove(event) 	     
{
if (event.preventDefault) {
event.preventDefault();
event.stopPropagation();
} else {
event.returnValue = false;
event.cancelBubble = true;
}

event = (event) ? event : window.event; // IE
if (event)
{ 		 			
if ($("div1")) 			
{ 				

начальные координаты объекта
			 
var code = (event.charCode) ? event.charCode : event.keyCode;
switch(code) 				
{ 					
case 37: 						
сдвиг влево // не работает в Опере
break; 					
case 38: 						
сдвиг вверх // не работает в Опере
break; 					
case 39:
сдвиг вправо // работает в Опере
break;
case 40:
сдвиг вниз // работает в Опере
break;
}
}
}
return false
}

document.onkeypress = keymove;


Есть JS-код. Великолепно работает перемещение в ФФ, а вот в Опере смещается только вправо и вниз. В чем проблема? В опере используются другие коды для клавиш?

Kolyaj 27.04.2009 22:29

Ну так добавьте alert, посмотрите какой код клавиши показывает в Опере, неужто трудно догадаться?

MaxPayne 27.04.2009 22:59

Спасибо за совет! Но в том-то и дело, что показывает те клавиши, которые нужно. 37 и 38 соответственно.

Kolyaj 27.04.2009 23:33

Цитата:

Сообщение от MaxPayne
сдвиг влево

Здесь ошибки нет.
Цитата:

Сообщение от MaxPayne
сдвиг вверх

Здесь тоже. Не понимаю, что не работает.

MaxPayne 28.04.2009 10:05

Вот и я не понимаю. Действия по сдвигу противоположные клавишам вправо и вниз, а все равно не работает. Причем только в Опере не работают..

MaxPayne 28.04.2009 10:12

Вроде нашел неточность.
Когда нажимаю вправо - смещается на 2px, хотя
var xLeft = $("div1").offsetLeft + 1;
Когда нажимаю влево - смещается на 1px, если
var xLeft = $("div1").offsetLeft - 2;

Crec 27.06.2009 12:11

MaxPayne, не работает потому что в опере оно уже занято, читай http://www.artlebedev.ru/tools/techn...ow-navigation/

там сделали для оперы Ctrl + Shift ...

MininAS 23.09.2009 23:09

1. event = (event) ? event : window.event;
пожалуйста разжуйте мне это действо!

2. Ты пытаешься двигать предмет какой-нибудь?
..у меня в опере работают все стрелки..

3. А вот в ФФ нихренюшиньки не пойму как клавиши оживить
и в опере не работает правая кнопка мыши нивкакую.

if (navigator.appName == "Opera") 
{
document.oncontextmenu = new Function("[I]действие не работает[/I]; return false");
document.onkeypress = f_KeyPress;
}
if (navigator.appName == "Netscape") 
{
document.oncontextmenu = new Function("[I]действие[/I]; return false");
document.onkeyup = new Function("alert (event.keyCode);"); [I]// не работает[/I]
}
if (navigator.appName == "Microsoft Internet Explorer") 
{
document.oncontextmenu = new Function("[I]действие[/I]; return false");
document.onkeydown = f_KeyPress;
}

function f_KeyPress ()
{
	if (event.keyCode == 1094 || event.keyCode == 38) действие;
	if (event.keyCode == 1099 || event.keyCode == 40) действие;
	if (event.keyCode == 1092 || event.keyCode == 37) fдействие;
	if (event.keyCode == 1074 || event.keyCode == 39) действие;
	return false;
}

Octane 23.09.2009 23:21

Цитата:

Сообщение от MininAS
event = (event) ? event : window.event;

Что не понятно, тернарный оператор не знаете, или не понятно зачем это действие? В IE в функцию-обработчик события не отправляется, в качестве 1-го аргумента, объект-событие, поэтому забираем его из глобального контекста. Можно записать так:
element.onclick = function(event) {
    if(typeof event == "undefined") {
          event = window.event;
    }
    
    …

}

MininAS 23.09.2009 23:37

Не знал! Окей спасибо с ентим разобрался по ссылке тернарный оператор.

А можно еще про клавиши в ФФ? Пожалуйста прямо по скрипту.

Octane 23.09.2009 23:49

Цитата:

Сообщение от MininAS
А можно еще про клавиши в ФФ? Пожалуйста прямо по скрипту.

А что с ними не так? Выше ссылку давали: Навигация с помощью стрелок.

MininAS 24.09.2009 00:17

Я про свой скрипт.

Octane 24.09.2009 00:31

Изменять контекстное меню в опере может разрешить только пользователь:
Инструменты → Настройки → Дополнительно → Содержимое → Настройки JavaScript → Позволит контролировать правую кнопку мыши.

Пример со стрелками по ссылке работает в FF.

Kolyaj 24.09.2009 09:39

Цитата:

Сообщение от Octane
element.onclick = function(event) {
    if(typeof event == "undefined") {
          event = window.event;
    }
 
    …
 
}

element.onclick = function(event) {
    event = event || window.event; 
    …
 
}

MininAS 24.09.2009 22:20

Цитата:

Сообщение от Octane (Сообщение 30844)
Изменять контекстное меню в опере может разрешить только пользователь:
Инструменты → Настройки → Дополнительно → Содержимое → Настройки JavaScript → Позволит контролировать правую кнопку мыши.

Пример со стрелками по ссылке работает в FF.

Контекстное меню не удается заблокировать!

Octane 24.09.2009 22:43

Kolyaj,
раз тернарный оператор не знаком человеку, думаю, такая штука:
Цитата:

Сообщение от Kolyaj
event = event || window.event;

тоже будет непонятной :) поэтому и написал самый простой и громоздкий вариант.


Цитата:

Сообщение от MininAS
Контекстное меню не удается заблокировать!

Вопрос был:
Цитата:

Сообщение от MininAS
и в опере не работает правая кнопка мыши нивкакую.

а не как запретить контекстное меню :-) я просто не так выразился про "Изменять контекстное меню".

MininAS 24.09.2009 23:02

Цитата:

Сообщение от Octane (Сообщение 30944)
Kolyaj,
раз тернарный оператор не знаком человеку, думаю, такая штука:тоже будет непонятной :) поэтому и написал самый простой и громоздкий вариант.

Хорошо написал, я все сразу понял.
А пр.кл.мыши использовать в моем случае с рабочим конт.меню нет смысла.

и Еще Разъесни пожалуйста
if (navigator.appName == "Opera") 
{
	document.onkeypress = f_KeyPress;
}
if (navigator.appName == "Netscape") 
{
	document.onkeydown = f_KeyPress;
}
if (navigator.appName == "Microsoft Internet Explorer") 
{
	document.onkeydown = f_KeyPress;
}
function f_KeyPress (event)
{
	evt = (event.keyCode) ? event.keyCode : event.which; 
	if (evt == 1094 || evt == 38) {действие}
	if (evt == 1099 || evt == 40) {действие}
	if (evt == 1092 || evt == 37) {действие}
	if (evt == 1074 || evt == 39) {действие}
}

1. Для чего event вводить в фунцию - function f_KeyPress (event)
2. И здесь в отличие от первого скрипта не работает ентот в IE?

Для Опреы и IE использую разные события keyPress и keyDown соответственно т.к. заблокировать передвижение страницы клавишами стрелок в каждом браузере можно разными событиями с return false

MininAS 24.09.2009 23:10

АААААААА понял что б в IE работало надо добавить
function f_KeyPress (event)
{
	event = (event) ? event : window.event;
	evt = (event.keyCode) ? event.keyCode : event.which; 
	if (evt

Octane 24.09.2009 23:19

Цитата:

Сообщение от MininAS
1. Для чего event вводить в фунцию - function f_KeyPress (event)

Объект "событие" (event)

MininAS 24.09.2009 23:31

А вы не моглибы объяснить с точки зрения вызова функции типа:
если есть:
function ClickMyKey (key, key2) {}

то должен быть ее вызов:
ClickMyKey (key, key2);


Если я правильно понимаю то при выражении document.onkeypress = ClickMyKey; именно синтаксис языка подразумевает, данное событие передать в функцию обработчика?

Octane 24.09.2009 23:47

В W3C-модели событий в ClickMyKey первым аргументом будет передан объект "событие", в IE ничего не передается, в нем объект "событие" можно получить по ссылке window.event.

MininAS 25.09.2009 00:33

Ясненько боль маля. Спсб.
Маленькое отступление: где можно прочесть про то как учесть пользователей ONLINE.
За ранее спасибо.

HelpeR 09.06.2010 20:25

Здравствуйте!
В Opera 10.53 стрелка вниз не работает. Все остальные стрелки работают нормально. Что бы получить keyCode 40 требуется зажать Alt+Ctr+вниз тогда keyCode отображается. Как можно выйти из этой ситуации. А мне нужно что бы скрипт именно реагировал на просто клавишу вниз.
this.keyControl = function(e, obj) {
    if(this.isActive) {
        var e = e || window.event;	
	    alert(e.keyCode);
    }
}

Очень странно, написал простенький скрипт, который почему то работает нормально в опере
document.onkeydown = function(e) {
    var e = e || window.event;
    alert(e.keyCode);
}

Придется разбираться :)
Нашел в чем причина. Почему то на событие onkeyup e.keyCode 40 не выводится, а на onkeydown выводится :) Это глюк?

Kolyaj 09.06.2010 21:49

Цитата:

Сообщение от HelpeR
Это глюк?

Это Opera. Там ещё не такое бывает.

micscr 10.06.2010 08:41

для Tab в opera то же самое.

HelpeR 10.06.2010 13:25

Цитата:

Сообщение от micscr (Сообщение 58826)
для Tab в opera то же самое.

Да нет, таб обрабатывался на keyup нормально

micscr 10.06.2010 16:05

в jQuery tab на keyup ни в одном браузере не срабатывает.

HelpeR 10.06.2010 16:12

Цитата:

Сообщение от micscr (Сообщение 58899)
в jQuery tab на keyup ни в одном браузере не срабатывает.

Вот так значит реализованы эти библиотеки!
Честно говоря вообще не сторонник этих библиотек!

exec 10.06.2010 16:25

HelpeR, фреймворк не обязан предусматривать все случаи и подгадывать, что напишет скриптёр.

HelpeR 10.06.2010 16:32

exec, вам не кажется, что по этой причине, легче написать свой скрипт, который работал бы в точности под ваши нужды, нежели загружать 30кб кода, а потом возиться с ним. Да конечно это не в каждом случае так. Согласен, что в некоторых случаях удобнее использовать именно эти библиотеки. Вам не кажется, что jQuery можно назвать новым языком программирования, который нужно учить? А не лучше ли выучить чистый js и творить, что душе угодно?!

micscr 10.06.2010 16:56

Цитата:

Сообщение от HelpeR (Сообщение 58854)
Да нет, таб обрабатывался на keyup нормально

че то ты темнишь, отец - проверил без фреймфорков - нифига и не только в opere а и в других ...

micscr 10.06.2010 17:28

Цитата:

Сообщение от HelpeR (Сообщение 58907)
вам не кажется, что по этой причине, легче написать свой скрипт, который работал бы в точности под ваши нужды, нежели загружать 30кб кода, а потом возиться с ним. Да конечно это не в каждом случае так. Согласен, что в некоторых случаях удобнее использовать именно эти библиотеки. Вам не кажется, что jQuery можно назвать новым языком программирования, который нужно учить? А не лучше ли выучить чистый js и творить, что душе угодно?!

У каждого свое ИМХО. Как по мне - если бы когда я начинал изучать просто javascript мне кто то посоветовал начать с изучения jQuery, а потом уже разбираться в тонкостях pure JS - я бы того человека с благодарностью еще 10 лет вспоминал .......

HelpeR 10.06.2010 20:33

Цитата:

Сообщение от micscr (Сообщение 58911)
че то ты темнишь, отец - проверил без фреймфорков - нифига и не только в opere а и в других ...

Таб перекитывает фокус на адресную строку, строку поиска и только при фокусе страницы, срабатывает один раз, не зависимо то ли up или down и потом переключает фокус. Так работает в ff and opera а вот ie вообще не реагирует когда фокус на странице и сразу же переключает фокус

x-yuri 10.06.2010 22:40

Цитата:

Сообщение от HelpeR
exec, вам не кажется, что по этой причине, легче написать свой скрипт, который работал бы в точности под ваши нужды, нежели загружать 30кб кода, а потом возиться с ним. Да конечно это не в каждом случае так. Согласен, что в некоторых случаях удобнее использовать именно эти библиотеки. А не лучше ли выучить чистый js и творить, что душе угодно?!

на данный момент считаю так: любой фреймворк решает какие-то проблемы, но... не так страшен jQuery, как его плагины :) Фреймворки в первую очередь должны позволять легко реализовывать требуемую функциональность, а не предлагать уже готовую. Но если предлагают, то в ней должно быть просто разобраться. В рамках jQuery это можно сделать в простых случаях.

Цитата:

Сообщение от HelpeR
Вам не кажется, что jQuery можно назвать новым языком программирования, который нужно учить?

jQuery - очень простой язык фреймворк, потому и популярный.

p.s. Фреймворк просто позволяет не решать еще раз проблемы, которые уже решили создатели фреймворка
UPD. p.p.s. я бы сказал, что jQuery - скорее библиотека, чем фреймворк


Часовой пояс GMT +3, время: 19:54.