上次写代码时碰到一个类型错误问题,在数据传参中浏览器报了以下这个错误:
一开始还以为是不能不能传递中文的原因,试验了英文结果也是一样的。
后来发现其实是在传参的过程中字符被当成是变量了,所以才会报出未定义的错误。
做了一个简单版的代码,有需要的朋友可以借鉴下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
<div id="d1"></div>
<script>
var json=[
{id: 1, num: "中文"},
{id: 2, num: "english"}
];
var html="";
var content; //先在循环外面声明一个需要拿来存值的变量;
for(var i=0;i<2;i++){
// ECMAScript 6 语法 不兼容IE9及以下
// html+=`<!--<button onclick="adc('${json[i].num}')">测试</button>-->`
// 兼容性较高
// html+="<button onclick=adc('"+json[i].num+"')>测试</button>";
//或者 把需要传递的值提前声明 并 转换一下,
content='"中文字符"'; //最外面是单引号,里面套着双引号,这个要跟下面事件的单双引号配合使用;
html+="<button onclick=adc("+content+")>测试</button>";
}
d1.innerHTML+=html;
function adc(c) {
console.log(c);
}
</script>
</body>
</html>
其实从理论上理解比较简单,既然字符串是被当做变量传递,那么我们就直接把这个传递的“变量”改成字符串就可以了
就酱~~~