[英]JS - How to add an onclick event to a div with parameter?
我知道如何將不帶參數的onclick事件添加到div中:
newDiv.onclick = selectUnit;
function selectUnit() {}
但是我無法使其與參數一起使用:
function appendUnit(nb) {
var newDiv = document.createElement("div");
newDiv.id = "unit" + nb;
newDiv.onclick = selectUnit(this.id); // This throws me undefined
document.getElementById("unitsList").appendChild(newDiv);
}
function selectUnit(id) {
console.debug(id);
}
我怎樣才能做到這一點 ?
您將需要一個匿名函數,因為無法將參數傳遞給引用的函數
function appendUnit() {
var newDiv = document.createElement("div");
newDiv.onclick = function() {
selectUnit(this.id);
}
document.getElementById("unitsList").appendChild(newDiv);
}
function selectUnit(id) {
console.debug(id);
}
但要注意的價值this
將繼續,所以你可以做
function appendUnit() {
var newDiv = document.createElement("div");
newDiv.onclick = selectUnit;
document.getElementById("unitsList").appendChild(newDiv);
}
function selectUnit() {
console.debug( this.id ); // this is still the same here
}
有了那行代碼
newDiv.onclick = selectUnit(this.id);
您只需調用該函數,獲取其結果並將其存儲到onclick處理程序即可。
內部沒有定義返回的函數將返回未定義。 this.id
將引用您當前在范圍內具有的this
元素, this
元素可能是window
對象。
當點擊發生時,Chrome會在某個地方調用此函數
DOMElement.onclick(EventObject);
和你的線將是這樣的
(undefined)(this.id);
導致錯誤
您要做的就是使用方法設置onclick
newDiv.onclick = selectUnit;
chrome會稱之為
DOMElement.onclick(EventObject);
有了DOMElement.onclick == selectUnit
我們可以假設DOMElement.onclick == selectUnit
與此類似:
selectUnit(EventObject);
然后,在selectUnit
函數上,您必須知道如何訪問id
。 您可以在https://developer.mozilla.org/zh-CN/docs/Web/API/Event上看到可以使用的功能。 因此,新的selectUnit
函數將是:
function selectUnit(event) {
var id = event.target.id;
console.debug(id);
}
您永遠不會在示例代碼中設置ID:
function appendUnit() {
var newDiv = document.createElement("div");
newDiv.id = "somevalue";
[...]
newDiv.onclick = "selectUnit(this.id);" // This throws me undefined
document.getElementById("unitsList").appendChild(newDiv);
}
function selectUnit(id) {
console.debug(id);
}
嘗試這個
function appendUnit() {
var newDiv = document.createElement("div");
[...]
newDiv.onclick = function(){
selectUnit(newDiv.id); // This throws me undefined
}
document.getElementById("unitsList").appendChild(newDiv);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.