2011-08-12 157 views
0

我有一個包含鏈接的列表。我使用這個代碼來訪問它們:處理onclick事件

function initAll() { 

var allLinks = document.getElementById("nav").getElementsByTagName("a"); 
for (var i=0; i< allLinks.length; i++) { 
    allLinks[i].onmouseover = showPreview; 
    allLinks[i].onmouseout = function() { 
     document.getElementById("previewWin").style.visibility = "hidden"; 
     allLinks[i].onclick=mainProcess; 
     } 
    } 
} 

function mainProcess(evt){ 
    alert(this.value); 
    false; 
} 

這不是確切的代碼,我所要做的是,我需要確定鏈接被點擊和鏈路的基礎上進行了一些功能,點擊。我不知道代碼需要修改的地方......頁面在allLinks[i].onclick=mainProcess(this);行發生錯誤。

現在的問題是,我不知道我應該如何處理所有三個事件?

回答

0

嘗試更改爲此:

for (var i = 0; i < allLinks.length; i++) { 
    allLinks[i].onclick = mainProcess; 
} 

function mainProcess(event) { 
{ 
    alert(this.value); 
    return false; 
} 
+0

你仍然會遇到一個問題 - 傳遞給mainProcess的參數將是事件對象,而不是鏈接元素。它應該是'alert(this.value);'如果OP想要鏈接的值屬性 – Flambino

+0

是的,你是對的:D –

1

1)您將每個鏈接的onclick屬性設置爲由mainProcess()返回的值- 它始終返回false。因此,實際上,您正在編寫allLinks[i].onclick = false;

2)當您直接定義事件處理程序時,事件觸發時傳遞給它的參數是事件對象 - 而不是它被觸發的元素。

找出元素,你可以看在事件對象,或者(因爲處理程序已被添加到元素本身),只需使用this,因爲這將涉及到鏈接元素

for (var i = 0; i < allLinks.length; i++) { 
    allLinks[i].onclick = mainProcess; 
} 

function mainProcess(event) { 
{ 
    alert(this.value); 
    return false; 
} 
+0

哦!我知道它是第一次使用onmouseover然後onmouseout,然後onclick。所以這是永遠不會出去onclick事件....實際代碼是這樣的: –

+0

var allLinks = document.getElementById(「nav」)。getElementsByTagName(「a 「); for(var i = 0; i

+0

函數initAll(){ \t \t var allLinks = document.getElementById(「nav」)。getElementsByTagName(「a」); \t for(var i = 0; i

相關問題