最近在寫js的時候遇到了一個低級問題,但是解決它廢了一些周折,現在記錄下來以后當樂呵看看。
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>測試頁面</title>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
</head>
<script type="text/javascript">
function test() {
var jsonObj = {"a1":"b1"};
itemContent = "<button type=button onClick='show(" + jsonObj + ")'>測試</button>"
//alert(itemContent)
$(".start").after(itemContent);
}
function show(json) {
for(var key in json){
alert(key + " " + json[key])
}
}
</script>
<body onload="test()">
<hr class="start"/>
</body>
</html>
非常簡單的一個邏輯,就是動態拼裝一個button,點擊后會觸發一個傳入json對象的函數。但是點擊后瀏覽器總是報一個錯誤:
SyntaxError: missing ] after element list
查看了一下對應的代碼行,是這個:
itemContent = "<button type=button onClick='show(" + jsonObj + ")'>測試</button>"
左看右看,沒發現什么問題,而且看報錯還感覺是格式問題,所以試了各種加轉義等方法,都不管用... 最后,決定打印出來這個拼裝的字符串才發現了端倪:
1.png
原來,拼裝字符串的時候也把Json對象變為了字符串合并了,并不是把json內容合并。既然問題找到了,那就用json字符串好了,改為:
itemContent = "<button type=button onClick='show(" + JSON.stringify(jsonObj) + ")'>測試</button>"
1.png
測試成功!