Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.11.2016, 22:09
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

Как правильно указать обработчик события?
есть код, создающий следующую структуру:
<div>
  <p>
      <a>ссылка1</a>
  </p>
  <p>
      <a>ссылка2</a>
  </p>
  <p>
      <a>ссылка3</a>
  </p>
</div>

вот, собственно, скрипт:
var arr = localStorage.list ? JSON.parse(localStorage.list) : [];
var len = arr.length;
 
(function createHTML(){
    var div = document.createElement('div');
    div.className = "links-domain";
    document.body.appendChild(div);
    var p;
    var a;
    for (var i=0; i < len; i++){
        p = document.createElement('p');
        p.innerText = (i+1) + ".";
        div.appendChild(p);
        a = document.createElement('a');
        a.href = "http://www." + arr[i].domain;
        a.id = a.innerText = arr[i].name;
        p.appendChild(a);
    }
})();
 
document.addEventListener('DOMContentLoaded', addListener);
function addListener(){
    for (var j=0; j < len; j++){
            var elem = document. getElementById(arr[j].name);
            elem.onclick = clickHandler(elem.href);//function(){chrome.tabs.create({url: elem.href})};
                        //если сделать как в коментарии выше, то открывается только последняя ссылка
    };
}
 
function clickHandler(url_){
        chrome.tabs.create({url: url_});
}

почему открываются сразу все вкладки или
только какая-то одна при клике на любой ссылке?
как в подобных случаях правильно создавать обработчики, да и, вообще, структуры, указанные выше?
Ответить с цитированием
  #2 (permalink)  
Старый 06.11.2016, 22:24
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

clickHandler() - скобочки в конце имени функции значат вызов этой функции прямо сейчас. В elem.onclick попадает уже результат вызова данной функции(тут: undefined), тогда как сама функция сразу вызывается в цикле.

function addListener(){
  for (var j=0; j < len; j++){
    var elem = document. getElementById(arr[j].name);
    elem.onclick = clickHandler;
  };
}

function clickHandler(event){  
  chrome.tabs.create({url: this.href}); //this - ссылка на вызвавший событие elem
}
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 06.11.2016, 23:10
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

да, Вы правы.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Json и как его правильно кушать (Help plz!) JohnyVoo Angular.js 2 04.05.2016 19:55
как правильно обращаться к свойствам объект внутри самого объекта ? mitiya Общие вопросы Javascript 12 25.04.2015 21:18
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
как правильно установить обработчик onclick? Yurik AJAX и COMET 6 14.04.2009 21:04
Как заставить this в обработчике события указывать на объект? Dmitryk Events/DOM/Window 3 16.03.2009 08:45