Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中将节点作为参数传递?_Javascript_Dom - Fatal编程技术网

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

在JavaScript中将节点作为参数传递?,javascript,dom,Javascript,Dom,我正在将节点类型元素传递给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", c

我正在将节点类型元素传递给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)
    ,所以
    cardClicked
    中的
    this
    的值将为1(由于事件处理程序的工作方式,无论如何都是这样)

    值2仍然是调用
    cardClicked
    时传递的第一个参数,这将是事件对象(正如错误消息所说,它不是节点)

    改用



    有两个变量称为
    myP

  • var-myP
  • cardClicked(myP)
  • 因为您调用了
    cardClicked.bind(myP)
    ,所以
    cardClicked
    中的
    this
    的值将为1(由于事件处理程序的工作方式,无论如何都是这样)

    值2仍然是调用
    cardClicked
    时传递的第一个参数,这将是事件对象(正如错误消息所说,它不是节点)

    改用


    您能为我们创建一个运行环境吗?我在代码中没有看到任何会导致
    myP
    不是节点的内容。虽然你应该考虑不要在循环数组中使用<代码>(假设<代码> SET。卡< /代码>是一个数组)。你能创建一个让我们运行的吗?我在代码中没有看到任何会导致
    myP
    不是节点的内容。虽然您应该考虑在循环数组中不使用<代码>(假设<代码> SET。卡< /代码>是一个数组)。
     function init() {
         var i, myP;
         for (i in set.cards) {
             myP = document.createElement("p");
             myP.innerHTML = set.cards[i].points + "&nbsp; &nbsp;" + set.cards[i].name;
             myP.addEventListener("click", cardClicked);
             document.getElementById("left column").appendChild(myP);
         }
     }
    
     function cardClicked(event) {
         document.getElementById("right column").appendChild(this);
     }