17.04.2012, 13:25
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Kolyaj
|
это всего лишь ваши фантазии. keypress должен срабатывать, когда введён какой-то символ, а не когда нажата клавиша.
|
То-есть по вашему я всю жизнь программирую и событие на всех языках под названием keypress оказывается везде совсем не keypress а как тоесть это правильнее тогда по вашему нужно было назвать keycharinput тогда уж. KeyPress и в африке keypress про буквы в названии события не слова нет, а значит ввод тут совершенно не причем. И к вашему сведению стрелки тоже делаю ввод данных в бувер клавиатуры, просто программы их обрабатывают так как им надо. И не надо ляля. Keypress четко своим названием говорит что именно press а не input
|
|
17.04.2012, 13:33
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Можно, конечно, встать в позу, и кричать, что всю жизнь на Си пишу, и там вот так. А можно пойти и почитать, как оно не в Си, а в JavaScript.
Ещё раз цитата из ссылки выше
Цитата:
|
Возникает сразу после keydown, если нажата символьная клавиша, т.е. нажатие приводит к появлению символа.
|
Нажатие на стрелки к появлению символа не приводит.
|
|
17.04.2012, 13:41
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
мне эта цитата ни о чем не говорит, ибо я больше доверяю спецификациям.. Хотя и в них не всегда все найдешь. А то что в JS принято так как вы говорите, то это принято кем? Простыми JS программистами? А где оф. документ об этом говорящий? Нету? Ну еще бы, проще же для себя сделать выводы самому. А может вовсе вывод сделан от принятых решений в браузере допотопных времен. Я лишь знаю одно, что мои привычным требованиям в программировании, опера меня вполне устраивает, потому что я получаю то что ожидаю. А не то что где-то кто-то решил что в JS оно будет так. Флаг им в руки.
|
|
17.04.2012, 13:52
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
НО! Есть приписка в той же спецификации:
Цитата:
|
⚠Warning! the keypress event type is defined in this specification for reference and completeness, but this specification deprecates the use of this event type. When in editing contexts, authors can subscribe to the "input" event defined in [HTML5] instead.
|
Говорящая о том что данное поведение в последующем может измениться, так как в спецификации HTML5 появилось событие oninput которое и нужно использовать для отлова вводимых клавиш. Поэтому Опера вполне норм работает с этим событием, так же и событие oninput в Опере тоже есть, которое и ловит ввод данных.
Так что я уверен что в будущем полюбившееся вам поведение измениться у события keypress
|
|
17.04.2012, 15:57
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,576
|
|
спс за ответы, пока я подумал не усложнять мой код чисто из-за оперы, т.к. для своего сайта скрипт.
|
|
19.04.2012, 16:15
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,576
|
|
переделал все таки еще и под оперу, глянул что в рунете это оч. популярный браузер. Даже не знаю почему.
Может кому пригодится, кроссбраузерная обработка стрелок и пробела:
var agt = navigator.userAgent.toLowerCase();
var is_opera = ((agt.indexOf("opera") != -1)||(window.opera));
jQuery(document).ready(function(){
jQuery(document).keypress(function(ev){
if (ev.which == 32) {
nazata(32);
return false;
}
if (is_opera) {
if ((ev.keyCode > 36) && (ev.keyCode < 41)) {
nazata(ev.keyCode);
return false;
}
}
});
jQuery(document).keydown(function(ev){
if (is_opera) return false;
if ((ev.keyCode > 36) && (ev.keyCode < 41)) {
nazata(ev.keyCode);
return false;
}
});
});
|
|
19.04.2012, 17:15
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от micscr
|
var is_opera = ((agt.indexOf("opera") != -1)||(window.opera));
|
не лучший вариант юзать юзерагент...
раз уж пошла такая пьянка вот мой вариант:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
var keypressed = false, count = 0;
function _log( str ) {
document.body.innerHTML = "(" + count++ + ") " + str + ( keypressed ? ", вы продолжаете ee держать!" : "" );
}
$(document).bind( "keydown keypress", function( e ) {
var keystring = {
"37": "стрелка влево",
"38": "стрелка вверх",
"39": "стрелка вправо",
"40": "стрелка вниз"
}
var timeStamp = (new Date().getTime());
if ( !document.timeStamp || ( ( document.timeStamp + 10 ) < timeStamp ) ) {
if ( e.which === 32 ) {
_log( "Нажат пробел" );
} else if ( e.keyCode > 36 && e.keyCode < 41 ) {
_log( "Нажата функциональная клавиша: " + ( keystring[ e.keyCode ] || "код клавиши " + e.keyCode ) );
} else {
_log( "Нажата клавиша: " + ( keystring[ e.keyCode ] || "код клавиши " + e.keyCode ) );
}
document.timeStamp = timeStamp;
}
keypressed = true;
return false;
}).keyup(function(){
count = 0;
keypressed = false;
_log( "Отпустили клавиши" );
});
</script>
</head>
<body>
</body>
</html>
|
|
|
|