【问题标题】:test:62 Uncaught ReferenceError: is not defined at HTMLButtonElement.onclick (test:62)测试:62 未捕获的 ReferenceError:未在 HTMLButtonElement.onclick 中定义(测试:62)
【发布时间】:2019-10-27 08:18:24
【问题描述】:

我希望能够在我的函数中传输不是整数而是字符串的值。

我对整数没有任何问题,但对于链,我有声明问题,但我不明白它来自哪里......

<div id="test"></div>
<script>
  var b = "hello";

  var test = document.getElementById('test');
  test.innerHTML += "<button onclick='myFunction("+b+")'>Click me</button> ";

  function myFunction(MyVar) {
    console.log(MyVar);
  }
</script>

【问题讨论】:

  • 你能用小sn-p重现错误吗?
  • 使用 document.createElement 创建按钮,将函数对象分配给其 onclick 属性,这样您就不必担心将有效的 JavaScript 放在 HTML 中,然后使用将其添加到测试元素test.appendChild。 (搜索词:document.createElementappendChild、DOM。)
  • 或者使用 attachEventListener 代替旧的 onclick 属性。

标签: javascript


【解决方案1】:

修复变体:

test.innerHTML += "<button onclick=myFunction('"+b+"')>Click me</button> ";
test.innerHTML += "<button onclick='myFunction(\""+b+"\")'>Click me</button> ";
test.innerHTML += "<button onclick=\"myFunction('"+b+"')\">Click me</button> ";

等等

【讨论】:

  • 有问题的是缺少引号-您发送的是“你好”而不是“你好”或“你好”-以防你输入 window.hello = b;它会起作用 ;-) 但不确定上下文 - 全局变量是否可见。
  • 顺便说一句,你的方式有点慢 - 按钮开始工作需要一些时间 DOM 方法立即工作,但对于生成的大页面可能比你生成的标记慢。
  • 警告 - 第一个变体非常简单,但不完全有效也不推荐 - 如果脚本在引号中,您可能有 ex。命令之间也有空格,但是这样下一个(空格分隔)命令可能会作为另一个元素的属性。并且thanx 4接受。
【解决方案2】:

您已经在函数内部传递了一个字符串,因此您无需将 var 包含在双引号内:

var b = "hello";

  var test = document.getElementById('test');
  test.innerHTML += "<button onclick='myFunction(b)'>Click me</button>";
  function myFunction(MyVar) {
    console.log(MyVar);
  }
&lt;div id="test"&gt;&lt;/div&gt;  

【讨论】:

  • 会说,它不起作用 - 假设 b 在单击时未定义,但不是 100% 确定,并且不想启动 PC 或在移动设备上玩来检查。
  • 好的,但是可以肯定会尝试所有主要浏览器 - 包括 sn-ps 在内的每个平台的工作有时都会有所不同 - 甚至第一个提到的听众在某些方面也有所不同。
  • 你是对的 - 也适用于 FF、Chrome 和 IE。由于我经常使用 IIFE,forgot vars 也是全局变量。
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2017-05-22
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
相关资源
最近更新 更多