Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.01.2018, 11:17
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

очередность выполнения событий
по идее событие document.body.innerHTML += '.' в value.down должно происходить после ответа в value.up
на деле выводится сразу

в первой функции очерёдность события происходит параллельно с вызываемой
то-есть возникновение цикла ожидания value.down не происходит
загвоздка в том что вчера выполнялось document.body.innerHTML += window.event.type пока не происходило событие value.up
чего придётся ждать завтра


может это только у меня так
под вопросом сам javascript

var obj, value = {};
 if (window.attachEvent) { obj = function (element, event, handler) { element.attachEvent('on' + event, handler); } }
  else 
  {
     obj = function (element, event, handler) { element.addEventListener(event, handler, false); };
  }	


value.up = function(e) 
{ 
    
  document.body.innerHTML  += window.event.type 

 if ( window.event.type == 'keyup')  {   document.body.innerHTML  += '# сука'  }
}



value.down = function() 
{ 
  
   obj(window, 'keyup', value.up)

   document.body.innerHTML  += '.' //очерёдность события происходит параллельно obj(window, 'keyup', value.up)
}

obj(window, 'keydown', value.down);

Последний раз редактировалось Conus, 03.01.2018 в 11:22.
Ответить с цитированием
  #2 (permalink)  
Старый 03.01.2018, 14:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

По какой такой идее?
Программа выполняется по порядку, ваш "obj(keyup)" выполняется моментально, он ничего не ждёт: он только навешивает обработчик и всё(просто говорит программе: "когда юзер отпустит конпку - вызвать функцию up")
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 03.01.2018, 15:34
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

тогда что делать если надо выполнять код если нажата клавиша?

var Boo = false, obj, value = {};
 if (window.attachEvent) { obj = function (element, event, handler) { element.attachEvent('on' + event, handler); } }
  else 
  {
     obj = function (element, event, handler) { element.addEventListener(event, handler, false); };
  }	


value.up = function(e) 
{   

 if(window.event.type == 'keyup') { Boo = true; document.body.innerHTML  += Boo; }

}



value.down = function(e) 
{ 

 while(Boo) {  alert(Boo);  }//document.body.innerHTML  += ' . '; }

 obj(window, 'keyup', value.up)

 
}



obj(window, 'keydown', value.down);

Последний раз редактировалось Conus, 03.01.2018 в 15:41.
Ответить с цитированием
  #4 (permalink)  
Старый 03.01.2018, 16:16
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

Выполнять код по keydown. В любом случае пока он полностью не будет выполнен, никакого события keyup не произойдёт. Потому что js однопоточен. Если же у вас код выпоняется через промежутки времени(setTimeout/setInterval) то по keydown ставите флаг isKeyDown = true, по keyup - isKeyDown = false и в каждую итерацию таймера проверяете этот флаг.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 03.01.2018, 17:00
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

дело в том что если в кейдаун нажимаешь ctrl событие определенное в нем же выполняется один раз а если нажать символ допустим событие будет повторятся

как тут определишь цикл или последовательность

var Boo = false, obj, value = {};
 if (window.attachEvent) { obj = function (element, event, handler) { element.attachEvent('on' + event, handler); } }
  else 
  {
     obj = function (element, event, handler) { element.addEventListener(event, handler, false); };
  }	


value.up = function(e) 
{  
   document.body.innerHTML  +=  window.event.type
  
}


obj(window, 'keydown', function(e) 
    { 
        obj(window, 'keyup', value.up)

         document.body.innerHTML  += ' . '  //  событие

 
    });

Последний раз редактировалось Conus, 03.01.2018 в 17:11.
Ответить с цитированием
  #6 (permalink)  
Старый 03.01.2018, 18:13
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

<body>
<input id="startbuton" type="button" value="Поекхали">
<script>
var keysdown = {};
function keyEvent(e){
  keysdown[e.keyCode] = (e.type === 'keyup' || e.keyCode < 0x20) ? false : String.fromCharCode(e.keyCode); //только англиская раскладка, т.к. мы работаем с конкретными клавишами, а не с текстом, для того другие способы
  keysdown.ctrlKey = e.ctrlKey && 'Ctrl';
  keysdown.altKey = e.altKey && 'Alt';
  keysdown.shiftKey = e.shiftKey && 'Shift';
  e.preventDefault();
}
addEventListener('keyup', keyEvent);
addEventListener('keydown', keyEvent);

startbuton.addEventListener('click', function next(){
  var output = '';

  for(var key in keysdown) if(keysdown.hasOwnProperty(key)){
    if(keysdown[key]) output += 'Нажата клавиша "' + keysdown[key] + '". ';
  }
  if(!output){
    output = 'Ничего не нажато.';
  }

  document.body.innerHTML = output;

  setTimeout(next, 100);
});
</script>
<body>
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 04.01.2018, 19:15
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

я лучше-б так сделал бы
но не врубаюсь как цикл организовать
var Is = false, obj, value = {},
IsKey = function() { return Is; };
(  
  (  function(elem, type, Handl)
	 {
	    if (elem.attachEvent){ elem.attachEvent("on"+type, Handl) } else { elem.addEventListener(type, Handl, false) }
		return arguments.callee;
	 }
  )(window, 'keydown', function() { Is = true } )
)(window, 'keyup', function() { Is = false } )

 if (window.attachEvent) 
 { obj = function (element, event, handler) { ielement.attachEvent('on' + event, handler) } }
  else 
  {
     obj = function (element, event, handler) { element.addEventListener(event, handler, false)  };
  }	


value.up = function() //window.event.type
{  document.body.innerHTML  += ' .... ' + IsKey() }

obj(window, 'keydown', function() 
{ 
  obj(window, 'keyup', value.up);
  document.body.innerHTML  += ' . ' + IsKey() + '<br>'; 

//  while (IsKey() ) { alert(IsKey() ) } //  здесь висну

});
Ответить с цитированием
  #8 (permalink)  
Старый 04.01.2018, 19:47
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

Забудьте о циклах для взаимодействия с пользователем в js. Пока цикл не отработает ни одно пользовательское событие не пройдёт. JS однопоточен.

Вот тема от вашего брата по разуму: https://javascript.ru/forum/css-html...-continue.html почитайте, может что поймёте. (Есть подозрение, что вы пришли сюда с одних курсов по переквалификации с низкоуровневых языков.) А лучше почитайте учебник с этого сайта с нуля, т.к. ваше представление о том, как всё это работает на низком уровне тут только мешает.


P.S. Булевой перемеренной всё равно не получится, т.к. одновременно могут нажиматься и отпускаться много клавиш.
__________________
29375, 35

Последний раз редактировалось Aetae, 04.01.2018 в 19:50.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередность выполнения событий Fedya Общие вопросы Javascript 3 02.08.2014 17:47
Очередность выполнения 2х событий zilker Events/DOM/Window 11 20.12.2012 17:17
Какой есть обработчик событий, который будет запускаться после выполнения всего кода? KamalovRadik jQuery 12 08.11.2011 07:14
Очередность событий tarya AJAX и COMET 2 29.03.2011 03:22
Приостановка выполнения событий Vteam Events/DOM/Window 6 14.12.2009 00:25