| 
 Как правильно указать обработчик события? есть код, создающий следующую структуру: 
<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_});
}
почему открываются сразу все вкладки или только какая-то одна при клике на любой ссылке? как в подобных случаях правильно создавать обработчики, да и, вообще, структуры, указанные выше? | 
| 
 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
}
 | 
| 
 да, Вы правы. | 
| Часовой пояс GMT +3, время: 23:58. |