Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Возможно ли на одно событие повесить несколько обработчиков ? (https://javascript.ru/forum/events/43208-vozmozhno-li-na-odno-sobytie-povesit-neskolko-obrabotchikov.html)

Danxil 26.11.2013 17:16

Возможно ли на одно событие повесить несколько обработчиков ?
 
Например на событие mousedown повесить две функии ? Например -

element.addEventListener(mousedown , handler1, false);
element.addEventListener(mousedown , handler2, false);

и что бы при клике обе функции сработали.

Danxil 26.11.2013 18:07

Это понятно, но нужно именно два обработчика, которые можно вешать и снимать в завиимости от ситуации, что бы при этом они не зависили друг от друга. Можно это сделать и другими способами, но интересует именно этот.

cyber 26.11.2013 21:08

Danxil, можно сделать так

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <div id="t"> 1212</div>
    <script>
      
      //пример использования [start]
      var div = document.getElementById('t');
      
      function one() {
        
        console.log(1);
      
      }
      
      
      function two () {
      
       removeEvent(this, 'click', one, two);
      }
     
      
      addEvent(div, 'click', false, one, two);
      
       //пример использования [end]
      
      
      
      // функции можно передавать массивом ([one, two]) или именами как в примере после bool
      function addEvent(elem, event, bool, arr) {
        
        if(!isArray(arr)) {
          
          arr = [].splice.call(arguments, 3)
        
        }
        
        
          _eventList.call(elem, true, event, bool, arr);
      
      }
      
      
      // функции можно передавать массивом ([one, two]) или именами как в примере после event
      function removeEvent(elem, event, arr) {
        
         if(!isArray(arr)) {
          
          arr = [].splice.call(arguments, 2)
        
        }
        
        
        _eventList.call(elem, false, event, false, arr);
      
      
      }
      
      
      
      
      function _eventList (isAdd, event, bool, arr) {
        
        var leng = arr.length;
        
        for(var i = 0; i < leng; i++) {
          
          if(isAdd)
          	this.addEventListener(event, arr[i], bool);
          
          else 
            this.removeEventListener(event, arr[i]);
        
        
        }
      
      
      }
           
        
      function isArray(arr) {
        
       
        
        return !!~{}.toString.call(arr).indexOf('Array');
        
      }



    </script>

  </body>
</html>


Часовой пояс GMT +3, время: 13:27.