2012-12-15 2 views
0

Как проверить, произошло ли событие (определенного типа)? Предположим, что я должен работать со следующим кодом: «Вы прессованного ENTER после события щелчка»Проверка событий в JavaScript

<html> 

    <head> 
     <title>Events</title> 
     <script type="text/javascript"> 
      document.addEventListener('keydown', 

      function (event) { 
       if (event.keyCode == 13) { //ENTER key was pressed 
        alert("Hahaha!"); 

       } 

      }, false); 

      document.addEventListener('click', 

      function() { 
       alert("Ahahahah!"); 


      }, false) 
     </script> 
    </head> 

    <body></body> 

</html> 

Предположим, я хочу, чтобы окно предупреждения со строкой для отображения при нажатии ENTER и после события клика.

ответ

2

Вы должны записать порядок возникновения. JavaScript по умолчанию не запоминает цепочки событий так, как вы описываете, просто потому, что вы можете запускать их в любом порядке, так что это будет бесполезной особенностью языка.

В принципе, при запуске события клика вам необходимо записать, что он выстрелил. Основная реализация - использовать булевский флаг.

var clickFired = false;// by default it is false. 
document.addEventListener('click', function(event) { 
    clickFired = true; 
}, false); 
document.addEventListener('keydown', function(event) { 
    if (clickFired) { 
     alert('key pressed after click'); 
    } else { 
     alert('key pressed before click'); 
    }; 
}; 

JavaScript только запоминает несколько очень специфических событий. Он знает, является ли или нет ctrlKey, altKey, shiftKey или metaKey прессовали в то время, когда событие было запущено, помнит правила пузыря, фазы выполнения триггера, цели и еще несколько вещей, которые вы можете увидеть, набрав:

var clickFired = false;// by default it is false. 
    document.addEventListener('click', function(event) { 
     console.dir(event);//Firebug command. 
     clickFired = true; 
    }, false); 

Кроме того, beware, управление событиями, совместимыми с перекрестным браузером, к сожалению, не является ничтожным для достижения вообще. Различные браузеры имеют дело с событиями по-разному. Основным примером будет то, что Internet Explorer использует attachEvent(), а не addEventListener(). ~

Если вы пишете код для производственной среды, я бы порекомендовал вам использовать библиотеку какой-то формы, чтобы сделать вашу жизнь намного проще. В противном случае вам просто придется изобретать колесо, которое является удивительным для учебных целей, но вы можете найти его утомительным и трудоемким. Если вы действительно не знаете свой путь вокруг JavaScript, писать исходный код не подходит для чего-то, что вы хотите, чтобы другие люди использовали сразу.

0

Использование функции обратного вызова, вероятно, будет самым простым. Вот пример с более подробной информацией here

function mySandwich(param1, param2, callback) { 
    alert('Started eating my sandwich.\n\nIt has: ' + param1 + ', ' + param2); 
    callback(); 
} 

mySandwich('ham', 'cheese', function() { 
    alert('Finished eating my sandwich.'); 
}); 
Смежные вопросы