我正在将Node类型元素传递给cardClicked。

 function init() {
     for (i in set.cards) {
         var myP = document.createElement("p");
         myP.innerHTML = set.cards[i].points + "&nbsp &nbsp" + 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添加吗?

这是怎么回事?

最佳答案

您有两个名为myP的变量:


var myP
cardClicked(myP)


因为您调用了cardClicked.bind(myP),所以thiscardClicked的值将为1(由于事件处理程序的工作方式,因此该值一直为1)。

值2仍将是调用cardClicked时传递的第一个参数,它将是事件对象(如错误消息所述,它不是Node)。

请改用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);
 }

10-06 02:27