在JavaScript中传递节点作为参数?

时间:2016-11-15 22:13:53

标签: javascript dom

我正在将一个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添加?

发生了什么事?

1 个答案:

答案 0 :(得分:6)

您有两个名为myP的变量:

  1. var myP
  2. cardClicked(myP)
  3. 由于您拨打了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);
     }