为什么我的按钮没有收到其js循环创建的onclick命令?

时间:2019-01-19 07:05:09

标签: javascript html arrays object

请原谅我的乐队HTML约定。我只有这样的标签 供测试用。我正在尝试一个我可以通过我调用的功能 网站,它将采用静态定义的JSON变量并将其传递 可以从JSON创建HTML的函数。我进入 我没有收到任何错误但无法通过按钮访问时遇到麻烦 将其JSON定义为onclick命令。我看着检查员 在页面加载并且JS运行之后,但是按钮没有 具有onclick属性。我没有从任何问题 环。按钮的名称可以正常工作。我坚持要买JS 在JSON中添加到按钮。

//Examle of mkmdl() input:
let inputVar = {
  'buttons': [{
      "button": "I'm a button",
      "command": "console.log('Im a command');"
    },
    {
      "button": "Me too",
      "command": "console.log('Me too');"
    }
  ],

  'message': "This here is our modle message.",

  'image': 'URL(image URL)'
}




function mkmdl(obj) {
  // this function makes model boxes from the supplied JSON object.

  //image

  //message

  //button(s)
  for (var i = 0, size = obj['buttons'].length; i < size; i++) {
    console.log(i);

    let v = obj["buttons"][i]["button"];
    let x = obj["buttons"][i]["command"];

    var newElement = document.createElement("button");

    newElement.onclick = x;

    newElement.innerHTML = v;


    document.getElementById("body").appendChild(newElement);

  }
}

window.onload = mkmdl(inputVar);
window.onload = function() {
  inputVar["buttons"][1]["command"]
};
<body id="body">

</body>

1 个答案:

答案 0 :(得分:1)

这是因为您试图在处理程序中为事件侦听器分配参数。你做不到您应该将每个事件处理程序放在一个匿名函数中,并使用clearAddresses从字符串创建函数:

new Function
//Examle of mkmdl() input:
let inputVar = {
  'buttons': [{
      "button": "I'm a button",
      "command": "console.log('Im a command');"
    },
    {
      "button": "Me too",
      "command": "console.log('Me too');"
    }
  ],

  'message': "This here is our modle message.",
  'image': 'URL(image URL)'
}


function mkmdl(obj) {
  // this function makes model boxes from suppiled JSON object.

  //image

  //message

  //button(s)
  for (var i = 0, size = obj['buttons'].length; i < size; i++) {
    console.log(i);

    let v = obj["buttons"][i]["button"];
    let x = new Function(obj["buttons"][i]["command"]);

    var newElement = document.createElement("button");
    newElement.onclick = () => x();
    newElement.innerHTML = v;

    document.getElementById("body").appendChild(newElement);
  }
}

window.onload = mkmdl(inputVar);
window.onload = function() {
  inputVar["buttons"][1]["command"]
};