2011-08-21 187 views
0

我有一個href /文本列表,我需要做錨點然後顯示這些錨點。一切都很好,直到我實際點擊了任何錨點。他們每個人只打開最後一個href的標籤。即如果列表中最後一個元素的href是href_n,那麼即使'href'屬性不同,每個錨鏈接都會鏈接到href_n。Javascript錨鏈接

//Current basic setup: 

loop through list: 

anchor = doc.create('a') 
divElem = doc.create('div') 
anchor.setAttribute('class', 'foo') 
anchor.setAttribute('href', 'bar') 
anchor.innerHTML = 'mytext' 
anchor.addEventListener('click', function() {chrome.tabs.create({url: 'myurl'})}); 
divElem.appendChild(anchor) 
container.appendChild(anchor) 

以前我試着用.onClick,但我一直有與事件監聽器試圖只是附加到URL的一個問題。儘管這涉及到比事件監聽者更簡單的事情,但我仍然非常喜歡更清晰的解決方案。

非常感謝。

回答

1

你大多隻需要改變你的點擊處理程序,以不使用仍然無效的變量。下面是示例代碼:

var urlList = [ 
    "aaaa", 
    "bbbb", 
]; 

var textList = [ 
    "text1", 
    "text2" 
]; 

function createAnchors(urls, text, container) { 
    for (var i = 0; i < urls.length; i++) { 
     var a = document.createElement("a"); 
     var div = document.createElement("div"); 
     a.href = urls[i]; 
     a.innerHTML = text[i]; 
     a.className = "foo"; 
     a.addEventListener("click", function() { 
      chrome.tabs.create({url: this.href}); 
      return(false); 
     }); 
     div.appendChild(a); 
     container.appendChild(div); 
    } 
} 

的問題是,在你的事件監聽器函數的變量不計算,直到點擊。因此,在這種情況下,您可以通過直接從點擊鏈接獲取URL來避免使用它們。

我希望你也認識到舊版IE不支持addEventListenerThis mozilla page向您展示瞭如何在Internet Explorer部分處理這個問題。

+0

感謝。這很好。這個參考是我真正需要的。關於IE說明,那好吧,因爲這只是Chrome的擴展。 – user592419

+0

另外,爲什麼你把返回(假)? – user592419

+0

'返回(false)'在點擊處理程序中停止點擊的默認動作,在鏈接上將遵循URL。 – jfriend00

1

你需要創建一個封閉:

var urls = []; 
for(var i=0;i<urls.length;i++){ 
    anchor.addEventListener('click', 
     (function(url) { 
      return function() { 
       chrome.tabs.create({url: url}) 
      } 
     })(urls[i]) 
    ); 
}