Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.10.2014, 15:22
Аспирант
Отправить личное сообщение для Mitrandir Посмотреть профиль Найти все сообщения от Mitrandir
 
Регистрация: 03.06.2008
Сообщений: 37

Помогите улучшить код
Приветствую всех!
Давненько я тут не бывал.

Итак, словесное описание задачи:
есть условная схема клавиатуры, сделанная с помощью HTML.
При нажатии на определенную клавишу должен меняться цвет рамки вокруг "клавиши" с синего на красный. Кусок разметки

<div class="keyboard">
<div class="keyboardRow"><span class="key" id="q">Q<sub>Й</sub></span>
    <span class="key" id="w">W<sub>Ц</sub></span>
    <span class="key" id="e">E<sub>У</sub></span>
    </div></div>


Говнокод на js, реализующий задачу в нулевом приближении
function checkKeyPress(e)
{ var KeyID = e.charCode;
  switch (KeyID){
  case 113: pkey = document.getElementById("q");
	        pkey.style.borderColor = "red";
 		    break; 
   case 119: pkey = document.getElementById("w");
             pkey.style.borderColor = "red";
                    break; }


Вопрос, как его улучшить и избавиться от развесистого кейса?

Использовать объекты?

Последний раз редактировалось Mitrandir, 17.10.2014 в 15:25.
Ответить с цитированием
  #2 (permalink)  
Старый 17.10.2014, 15:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,206

Сообщение от Mitrandir
как его улучшить и избавиться от развесистого кейса?
Например поменять ИДшники на

id='key_code_<его_код>'


Тогда можно сразу обратиться к элементу

pkey = document.getElementById('key_code_113');
Ответить с цитированием
  #3 (permalink)  
Старый 17.10.2014, 15:38
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

Сообщение от Mitrandir Посмотреть сообщение
Вопрос, как его улучшить и избавиться от развесистого кейса?
Удобнее всего с помощью делегирования события.
Тоесть как то так:
document.querySelector('.keyboard').onkeypress = function(e) {
	var target = !e.target ? window.event.srcElement : e.target;

	if (target.className.indexOf('key') > -1) {
		target.style.borderColor = 'red';
	} else {
		//	some code
	}
}

Последний раз редактировалось Arramis, 17.10.2014 в 15:40.
Ответить с цитированием
  #4 (permalink)  
Старый 17.10.2014, 17:57
Аспирант
Отправить личное сообщение для Mitrandir Посмотреть профиль Найти все сообщения от Mitrandir
 
Регистрация: 03.06.2008
Сообщений: 37

Попробую так. Простота — это хорошо.
Ответить с цитированием
  #5 (permalink)  
Старый 17.10.2014, 18:07
Аспирант
Отправить личное сообщение для Mitrandir Посмотреть профиль Найти все сообщения от Mitrandir
 
Регистрация: 03.06.2008
Сообщений: 37

Немного не уловил идею.
Можно полный код
Ответить с цитированием
  #6 (permalink)  
Старый 17.10.2014, 18:57
Аспирант
Отправить личное сообщение для Mitrandir Посмотреть профиль Найти все сообщения от Mitrandir
 
Регистрация: 03.06.2008
Сообщений: 37

Уже додумал. Вопрос снимается.
Ответить с цитированием
  #7 (permalink)  
Старый 17.10.2014, 19:06
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

Сообщение от Mitrandir Посмотреть сообщение
Немного не уловил идею.
Можно полный код
я прошу прощения, делегирование тут не нужно было

<div class="keyboard">
		<div class="keyboardRow">
			<span class="key" id="keycode_113">Q<sub>Й</sub></span>
			<span class="key" id="keycode_119">W<sub>Ц</sub></span>
			<span class="key" id="keycode_101">E<sub>У</sub></span>
		</div>
	</div>

	<script type='text/javascript'>
	document.onkeypress = function(e) {
		e = e || event;
		
		var keys = this.querySelectorAll('.key'),
				i = 0,
				keyCode = e.keyCode ? e.keyCode : e.charCode
		
		for ( ;i < keys.length; ++i ) {
			if (keys[i].id.indexOf(keyCode) > -1) {
				keys[i].style.border = '1px solid red';
				break;
			}
		}
	}
	</script>

Последний раз редактировалось Arramis, 17.10.2014 в 19:10.
Ответить с цитированием
  #8 (permalink)  
Старый 17.10.2014, 20:14
Аспирант
Отправить личное сообщение для Mitrandir Посмотреть профиль Найти все сообщения от Mitrandir
 
Регистрация: 03.06.2008
Сообщений: 37

Вот такой получился код

function checkKeyPress(e) { 
  var KeyID = String.fromCharCode(e.charCode).toLowerCase();
  document.getElementById(KeyID).style.backgroundColor = "red";
  }
  document.onkeypress = checkKeyPress;

function checkKeyReleased(e)
{ var KeyID = String.fromCharCode(e.keyCode).toLowerCase();
  document.getElementById(KeyID).style.backgroundColor = "white";
}
  document.onkeyup = checkKeyReleased;


Как его можно доработать так, чтобы обрабатывать хотя бы квадратные скобки и знаки препинания на английской раскладке?
Ответить с цитированием
  #9 (permalink)  
Старый 17.10.2014, 20:16
Аспирант
Отправить личное сообщение для Mitrandir Посмотреть профиль Найти все сообщения от Mitrandir
 
Регистрация: 03.06.2008
Сообщений: 37

Спасибо. Завтра покручу.
А то я пошел другим путём
Ответить с цитированием
  #10 (permalink)  
Старый 17.10.2014, 20:47
Аспирант
Отправить личное сообщение для Mitrandir Посмотреть профиль Найти все сообщения от Mitrandir
 
Регистрация: 03.06.2008
Сообщений: 37

Скажите, а как возможно обработать onkeyup, чтобы при отпускании клавиши возвращался прежний ( или же заданный) цвет рамки/фона?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите изменить код формы GarMan jQuery 0 28.05.2014 22:51
помогите пожалуйста улучшить код. Duda.Ml1986@gmail.com Серверные языки и технологии 4 07.01.2012 20:53
Выпадающие списки. Помогите подправить код. cardsmoney Элементы интерфейса 6 18.02.2011 16:20
Код калькулятора на JS. помогите с ошибкой! kirill.psl Общие вопросы Javascript 9 26.08.2010 11:38
Помогите оптимизировать код. pizzZ jQuery 5 17.11.2009 23:52