2017-02-19 94 views
-1

我對事件目標有問題。我想檢查哪個元素被點擊,但它不起作用。這個問題有什麼解決方法?JavaScript事件目標

var prod = document.querySelectorAll("button"); 
 

 
function dodaj(e) { 
 
    var tar = e.target; 
 
    
 
    console.log(tar); 
 
} 
 

 

 
for(var i = 0; i < prod.length; i++) { 
 
    prod[i].addEventListener("click", function() { 
 
     dodaj(); 
 
    }, false); 
 
}

+0

嘗試:PROD [I] - 閱讀進度 - ( 「點擊」,函數(E){ dodaj(E); },假); – Hobroker

回答

0

的問題是您的單擊事件處理程序是,在實際功能做的工作(dodaj)的調用將和功能並沒有接到參考事件的匿名函數 - 匿名功能是。

所以它接收到的事件,您可以更改匿名函數,然後把它傳遞給dodaj這樣的:

prod[i].addEventListener("click", function(evt) { 
    dodaj(evt); 
}, false); 

然而,由於「包裝」的功能實在是不添加到您的代碼的任何值,你可以/應該完全刪除它,只需將實際的回調函數註冊爲click事件處理程序。

var prod = document.querySelectorAll("button"); 
 

 
function dodaj(e) { 
 
    console.log(e.target); 
 
} 
 

 
for(var i = 0; i < prod.length; i++) { 
 
    // When any button gets clicked, call the dodaj function 
 
    // directly. This is the function that will receive a 
 
    // reference to the click event. 
 
    prod[i].addEventListener("click", dodaj); 
 
}
<button id="one">Click Me</button> 
 
<button id="two">Click Me</button> 
 
<button id="three">Click Me</button> 
 
<button id="four">Click Me</button>

2

你沒有通過任何東西到dodaj。你可以直接通過dodajaddEventListener

prod[i].addEventListener("click", dodaj, false);