Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.04.2012, 10:35
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

Opera, событие не возникает вновь при вдавленной кнопке.
код
jQuery(document).ready(function(){
  jQuery(document).keydown(function(ev){
     if ((ev.keyCode > 36) && (ev.keyCode < 41)) {
	 nazata(ev.keyCode);	//действия 								 
     }
  });			  
});

Когда стрелку вдавливаешь, то событие должно повторяться. Так и работает во всех моих браузерах кроме оперы. Что делать?
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2012, 11:43
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от micscr
Когда стрелку вдавливаешь, то событие должно повторяться.
используйте keypress, я вообще удивлен что другие браузеры обрабатывают событие keydown так же как событие keypress
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2012, 12:18
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

хм перетащил проверку стрелок на keypress , в опере стало окей.
Но в хроме стрелки не работают на keypress(это у меня записано, поэтому я их на keydown и проверял)
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2012, 12:30
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

С клавишами в браузерах всё плохо, по ним можно диссертацию писать. Причём с разными клавишами по разному плохо. Если говорить про стрелки, то при их залипании
* В IE и в Chrome повторяется keydown
* В Опере повторяется keypress
* В Firefox-е повторяются и keydown, и keypress.

Вот и делай что хочешь. Получается надо оба ловить, но при этом в Firefrox-е одно из них игнорировать.

По логике, правильное поведение здесь у IE и у Chrome. Firefox решил перестраховаться, но в целом тоже покатит. А Опера в своём репертуаре мудацкого браузера.
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2012, 12:51
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Kolyaj
А Опера в своём репертуаре мудацкого браузера.
не согласен, keypress и в африке keypress. Это событие должно повторяться в тех случаях когда клавишу зажмешь и продолжаешь держать ее. Тогда при нажатии срабатывает keydown а повторы уже идут на keypress... Так что этот мудатский браузер как вы говорите, делает таки наоборот правильнее всех иных браузеров. Повторять keydown при зажатой клавише, вот это мудатство.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 17.04.2012, 13:00
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

не просто так события называются так как называются:
keydown - нажали клавишу, то-есть опустили, срабатывает событие что именно нажали клавишу
keypress - от английского слова pressed (зажата) то-есть клавиша зажата, соответственно все повторы идут на это событие до тех пор пока клавиша не будет отжата.
keyup - подняли клавишу, то-есть отпустили.

Вся эта логика работает во всех языках в которых я программировал, а их более десяти как минимум. Поэтому Опера все же работает правильнее всех.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 17.04.2012, 13:04
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

А вот кстати еще удивляет по какой такой логике сделали разный порядок срабатывания:
mousedown → mouseup → click
и
keydown → keypress → keyup

----------
Помня что click последним возникает, сначала хотел написать, что логичнее было бы повторять keydown, а Opera как всегда, но потом посмотрел, как ведут себя браузеры…

Последний раз редактировалось Octane, 17.04.2012 в 13:17.
Ответить с цитированием
  #8 (permalink)  
Старый 17.04.2012, 13:15
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Octane
А вот кстати еще удивляет по какой такой логике сделали разный порядок срабатывания:
А попробуй их пойми, разработчики Оперы не выдумывали никакой логики, а сделали так как принято в языке Си. Именно по порядку keydown → keypress → keyup, насчет разрабов других браузеров я сам бы хотел понять по какой такой логике решили повторять keydown при зажатой клавише.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 17.04.2012, 13:18
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

devote,
это всего лишь ваши фантазии. keypress должен срабатывать, когда введён какой-то символ, а не когда нажата клавиша. Поэтому нажатие стрелок не должно вызывать keypress вовсе, т.к. никакой символ при этом не вводится. Другими словами, keypress работает с символами, которые могут отличаться на одной и той же клавише в зависимости от раскладки или от shift/caps.
http://learn.javascript.ru/keyboard-events

keydown/keyup же работают с самими клавишами, независимо от раскладки.
Ответить с цитированием
  #10 (permalink)  
Старый 17.04.2012, 13:20
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Octane
mousedown → mouseup → click
Событие click по-определению срабатывает в случае, если и mousedown, mouseup случились на одном DOM элементе. Т.е. для проверки, нужно ли сгенерировать click, нужно сначала поймать mouseup, поэтому click будет всегда после.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Не срабатывают события из iframe при перетаскивании в него курсора в Opera jaguar954 Events/DOM/Window 1 01.08.2011 12:17
Событие mouseout при наведении мыши на пункт меню WalterScott Events/DOM/Window 2 12.05.2009 22:05
какое событие возникает во время формирования html IT-AleX Events/DOM/Window 2 20.02.2009 16:13