Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2014, 21:54
Интересующийся
Отправить личное сообщение для finestra Посмотреть профиль Найти все сообщения от finestra
 
Регистрация: 28.02.2013
Сообщений: 13

Что делать с повторяющейся условной конструкцией.
Всем доброй ночи. У меня родился код. Нужен совет, что с ним делать.
elem.addEventListener('keyup', function(e){
	if(e.keyCode === 13) {
		if(e.target.value.length === 1) {
			fn1();
		} else {
			fn2();
		}
	} else {
		if(e.target.value.length === 1) {
			fn3();
		} else {
			fn4();
		}
	}
}, false);

Условие - if(e.target.value.length === 1) {…} else {…}, неоднократно повторяется. Хотел бы знать, как программисты js в таких случаях кодируют.
Ответить с цитированием
  #2 (permalink)  
Старый 23.01.2014, 22:40
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

пример
elem.addEventListener('keyup', function(e){
    var val = e.target.value.length == 1;
    e.keyCode == 13 ? val ? fn1(): fn2(): val ?  fn3(): fn4();
}, false);
Ответить с цитированием
  #3 (permalink)  
Старый 23.01.2014, 23:27
Интересующийся
Отправить личное сообщение для finestra Посмотреть профиль Найти все сообщения от finestra
 
Регистрация: 28.02.2013
Сообщений: 13

спб за отклик. дело в том, что функция будет расширяться и в этом коде я запутаюьс.
у меня есть свой пример, и я хотел узнать есть ли решение лучше этого -
var keyup = (function(){
	var TmpMethod = function(fnTrue, fnFalse) {
		this.fnTrue = fnTrue || function(){};
		this.fnFalse = fnFalse || function(){};
	};

	TmpMethod.prototype.invoke = function(val){
		if(val) {
			this.fnTrue();
		} else {
			this.fnFalse();
		}
	};

        var strategy = {};
	
	strategy['13'] = new TmpMethod(function(){ alert('true') }, 
							function() { alert('false') });
	strategy['default'] = new TmpMethod();
	
	return function(e) {
		var key = (e.keyCode in strategy) ? e.keyCode : 'default';
		strategy[key].invoke(e.target.value.length);
	};
	
}());

Последний раз редактировалось finestra, 24.01.2014 в 01:45.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Некоторые клавиши возвращают одинаковый код: что делать? Cooskon Events/DOM/Window 2 20.10.2010 11:20
скрипт не считает , что делать ? serpos Общие вопросы Javascript 2 16.06.2010 23:29
Выдает ошибку. Что делать? octavian Общие вопросы Javascript 1 20.02.2010 12:13
Браузер доказывает что не видит функцию SleepWalker Общие вопросы Javascript 7 17.06.2009 23:14