我正在将一个Node类型元素传递给cardClicked。
function init() {
for (i in set.cards) {
var myP = document.createElement("p");
myP.innerHTML = set.cards[i].points + "   " + set.cards[i].name;
myP.addEventListener("click", cardClicked.bind(myP));
document.getElementById("left column").appendChild(myP);
}
}
function cardClicked(myP) {
document.getElementById("right column").appendChild(myP);
}
但是,当我运行此代码时,浏览器会说myP
不属于Node类型,无法通过appendChild
添加?
发生了什么事?
答案 0 :(得分:6)
您有两个名为myP
的变量:
var myP
cardClicked(myP)
由于您拨打了cardClicked.bind(myP)
,this
内的cardClicked
值将 1 (无论如何,由于事件处理程序的工作方式, )。
值2仍然是调用cardClicked
时传递的第一个参数,并且它将是事件对象(正如错误消息所说,它不是节点)。
改为使用this
。
function init() {
var i, myP;
for (i in set.cards) {
myP = document.createElement("p");
myP.innerHTML = set.cards[i].points + " " + set.cards[i].name;
myP.addEventListener("click", cardClicked);
document.getElementById("left column").appendChild(myP);
}
}
function cardClicked(event) {
document.getElementById("right column").appendChild(this);
}