Не корректно работает функция keydown?

var b = 28;
        $('body').keydown(function(eventObject){
            var keyCode = eventObject.which;

            if (keyCode == '40') {
                $('.polos').css('margin-top', b+'px');
                b = b + 19;
            } else if (keyCode == '38'){
                $('.polos').css('margin-top', b+'px');
                b = b - 19;
            }
        });

Как должен работать скрипт : keyCode == '40' - отвечает за нажатие нижний стрелки на клавиатуре, keyCode == '38' - за верхнею , $('.polos') - это у нас полоска которая должна отпускать или подниматься в зависимости от того что нажал пользователь. Если пользователь жмёт нижнею стрелку на клаве(keyCode == '40') то полоска отпускается на 19px, если на верхнею стрелку (keyCode == '38') то на оборот поднимается на 19px.
Как сейчас работает скрипт :
Жму нижнею стрелку полоска отпускается вниз , потом ещё раз жму нижнею стрелку и полоска спускается вниз, все ОК . НО потом я жму верхнею стрелку и почему то полоска отпускается вниз , хотя должна подниматься наверх. Только со второй нажатие стрелки на верх полоска поднимается на верх. Потом я жму уже нижнею стрелку и почему то стрелка поднимается на верх , и только со второго раза она работает как надо, почему ? и как исправить это недоразумение?
браузер Chrome.
  • Вопрос задан
  • 325 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Всё так, как вы и написали. Сначала изменение стилей, потом переменной.

var b = 28,
	polos = $('.polos');

$(document).keydown(function (e) {
	switch (e.keyCode) {
		case 38:
			b -= 19;
			break;
		case 40:
			b += 19;
			break;
	}

	polos.css({
		marginTop: b + 'px'
	});
});

Откуда у вас привычка сначала искать body, чтобы в нём зарегистрировать слушатель? Событие всплывает к window, но нам достаточно document.
Вы же понимаете, что скрипт в head про body не знает ничего, и вам нужно дождаться формирования DOM, найти body, и вот только теперь?..
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы