[英]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.