现在的位置: 首页 > 综合 > 正文

innerHTML的内容中包含function(param1, param2)时参数之间空格引起错误的问题

2018年05月25日 ⁄ 综合 ⁄ 共 1249字 ⁄ 字号 评论关闭

往一个div中innerHTML内容,内容中包含<a href="javascript:;" onclick="javascript:test('param1',   'param2');">超链接,发现一个很容易疏忽出错的地方。

先上代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>

<div id="test"></div>

<script type="text/javascript">
 var inner = "<a href='#' onclick='test('param1', 'param2')'>click</a>";
 var content = document.getElementById("test");
 content.innerHTML = inner;
 function test(param1, param2){
    alert(param1+param2);
 }
</script>
</body>
</html>

重点在这一句:

var inner = "<a href='#' onclick='test('param1', 'param2')'>click</a>";

这样写貌似没有问题,其实执行的时候,会报错误:Uncaught SyntaxError:Unexpected token }。审查元素,发现是这样子:

注意onclick对应的方法,本来是onclick="test('param1','param2')"结果变成了onclick="test(" param1',  'param2')',双引号和单引号冲突了。修改的方法是,onclick右边去掉成对的单引号:

var inner = "<a href='#' onclick=test('param1', 'param2')>click</a>";

但是执行的时候还是不对,再次审查元素,发现是这样:

测试了N久,最后把onclick=test('param1',  'param2')改成了onclick=test('param1','param2'),测试正常,如下:

var inner = "<a href='#' onclick=test('param1','param2')>click</a>";

初看好你会觉得压根没做过改动,其实是把test('param1',  'param2')两个参数中间那个空格去掉了,问题就出在这里,在innerHTML时,js将空格两边的内容进行了拆分,空格后面的部分被当成<a>的标签内容。

抱歉!评论已关闭.