Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.07.2013, 22:32
Кандидат Javascript-наук
Отправить личное сообщение для Valdemor Посмотреть профиль Найти все сообщения от Valdemor
 
Регистрация: 30.03.2012
Сообщений: 128

Всплытие событий
Пишу обработчик событий, использующий делигирование. Но возникла проблема.
Вот функция:
function click(selector, callback) {
var temp = function(e) {
   e = e || window.event;
   var target = e.target || e.srcElement;
   if(target.matches(selector)) callback();
}
document.addEventListener("click", temp, false);
}

При этом, я хочу, чтобы срабатывание шло от самого "глубокого" элемента DOM. Т.е. если я поставлю обработчики и на div, и на body, то обработчик div должен сработать первым, несмотря на место в коде. У меня же выходит, что место в коде отыгрывает наибольшую роль.
Как же быть? Как это реализирует jQuery, к примеру? Берет огромный массив обработчиков и положения объектов?
Ответить с цитированием
  #2 (permalink)  
Старый 11.07.2013, 14:11
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Valdemor, не совсем понятно, что не так, всплытие идет от элемента на котором произошло событие и html (или body не помню)
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    
    
    <div id='t1'>
      <div id='t2'>
      
       <div id='t3'>click me</div>
      </div>
    
    </div>

    <script>

var one = document.getElementById('t1');
      
      one.onclick = function () {
      
       alert(1)
      };

      var two = document.getElementById('t2');
      
      two.onclick = function () {
      
       alert(2)
      };
      
      
      var three = document.getElementById('t3');
      
      three.onclick = function () {
      
       alert(3)
      };
      
      
      
      
      document.body.onclick = function () {
      
       alert('body')
      };

    </script>

  </body>
</html>
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 11.07.2013, 14:40
Кандидат Javascript-наук
Отправить личное сообщение для Valdemor Посмотреть профиль Найти все сообщения от Valdemor
 
Регистрация: 30.03.2012
Сообщений: 128

Мне нужно использовать именно addEventListener.
Ответить с цитированием
  #4 (permalink)  
Старый 11.07.2013, 14:52
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Valdemor, а , ну так target не будет меняться в нем будет элемент по которому кликнули, что бы получить текущий элемент на котором сработало событие используйте this
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    
    
    <div id='t1'>
      <div id='t2'>
      
       <div id='t3'>click me</div>
      </div>
    
    </div>

    <script>

var one = document.getElementById('t1');
var two = document.getElementById('t2');
var three = document.getElementById('t3');      
  
      
    one.addEventListener('click', divDelegation);
    two.addEventListener('click', divDelegation);
    three.addEventListener('click', divDelegation);
      
      function divDelegation(e){
        
      
        alert(this.id);
        
      }
     
      
      document.body.addEventListener('click', function () {
      
        alert('body');
      
      });  
      
      

    </script>

  </body>
</html>
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #5 (permalink)  
Старый 11.07.2013, 21:03
Кандидат Javascript-наук
Отправить личное сообщение для Valdemor Посмотреть профиль Найти все сообщения от Valdemor
 
Регистрация: 30.03.2012
Сообщений: 128

Точно! Не по target, а по this! Спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
Не получается остановить всплытие событий веснушка Events/DOM/Window 2 27.07.2012 12:24
Переопределение событий lispik jQuery 4 13.01.2011 12:30
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 19:03
очередь событий прерывается alertом puchu Events/DOM/Window 8 16.07.2010 00:54