Событие .keydown()

Статус
Закрыто для дальнейших ответов.

sergei_bratishev

Well-Known Member
Регистрация
29.03.2012
Сообщения
129
есть код:
Код:
$(document).keydown(function(e){
		    if(e.keyCode  == 84)
			    $( ".aaa" ).css('bottom','0')
		    }
	    );
как мне сделать, что бы если если повторно произойдет нажатие на эту же кнопку, то совершить другое действие?
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
Первое, что приходит на ум в таких ситуациях, это доп. переменная - идентификатор нажатия. Быстрое решение, для гарантированного результата. Если его недостаточно - думаем дальше и ковыряемся в вопросе.
 

A-F

Well-Known Member
Регистрация
25.07.2011
Сообщения
390
А какого рода другое действие, с этим же селектором или с другим?
 

ArhAngel

Well-Known Member
Регистрация
07.05.2011
Сообщения
378
[member=sergei_bratishev], можно поступить как посоветовал [member=mrlasking], а именно использовать флаг

Код:
var aaa_bottom = true;
$(document).keydown(function(e){
				    if(e.keyCode  == 84)
						    if (aaa_bottom){
							    $( ".aaa" ).css('bottom','0');
							    aaa_bottom = false;
						    }else{
							    $( ".aaa" ).css('bottom','-44px');
							    aaa_bottom = true;
						    }
				    }
		    );
А можно через проверку это-го же свойства
Код:
if($( ".aaa" ).css('bottom') == '0') $( ".aaa" ).css('bottom','-44px'); else $( ".aaa" ).css('bottom','0);
Писал с головы, могут быть ошибки.

Блин, да что с парсером и отображением кода тут творится((
 

A-F

Well-Known Member
Регистрация
25.07.2011
Сообщения
390
Установить счетчик наверное было бы более красивым решением
 

ArhAngel

Well-Known Member
Регистрация
07.05.2011
Сообщения
378
Я просто подал идею и показал пример,
но если говорить о оптимизации и простоте - то:

Код:
var variant_1 = '0';
var variant_2 = '-44px';

$(document).keydown(function(e){
  if(e.keyCode  == 84){
     var a_block = $('.aaa'); 
    if($( a_block).css('bottom') == variant_1)
	  $(a_block).css('bottom', variant_2);
    else $(a_block).css('bottom', variant_1);
  }
});

переменные variant_X - значения, сделаны для удобства контроля значений, если что-то нужно поменять, ну нужно лезть внутрь функции, но можно их и не использовать.
var a_block = $('.aaa'); - для того, что-б тревожить дом-дерево только один раз, а не два за одно прохождение функции, в целях оптимизации. Тоже можно не использовать, а просто делать выбоки из дерева (учитывая что выборка по классу, а не по id, то лучше наверное оптимизировать, а еще лучше использовать id, если такой элемент только один в документе).

Что может работать быстрее и быть при этом понятнее и читабельнее, я не знаю, если есть пример - приведите.
 

A-F

Well-Known Member
Регистрация
25.07.2011
Сообщения
390
То есть в данном случае мы двигаем некий .aaa туда обратно, может проще использовать toggle :)

P.S Переменные лучше записывать так
var variant_1 = 0,
variant_2 = 44;

и px дописывать не обязательно они в jqeury и так являются единицей измерения по умолчанию.
 

sergei_bratishev

Well-Known Member
Регистрация
29.03.2012
Сообщения
129
A-F, а toggle это разве не для кликов мыши? мне же надо, что бы при нажатие кнопки на клавиатуре :)

ArhAngel, спасибо большое :biggrin: :biggrin: :biggrin: я использовал первый способ:
Код:
var aaa_bottom = true;
$(document).keydown(function(e){
								 if(e.keyCode == 84)
												 if (aaa_bottom){
														 $( ".aaa" ).css('bottom','0');
														 aaa_bottom = false;
												 }else{
														 $( ".aaa" ).css('bottom','-44px');
														 aaa_bottom = true;
												 }
								 }
				 );
а второй(более оптимизированный) почему то не сработал, я не понял правда почему, все правильно же вроде написано :wacko:
 

A-F

Well-Known Member
Регистрация
25.07.2011
Сообщения
390
потому что $( a_block

зачем в селектор вкладывать уже выбранный элемент
 
Статус
Закрыто для дальнейших ответов.
Верх Низ