JavaScript:超链接调用JavaScript同时传参数,参数的引号该如何处理呢

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
</head>
<script type="text/javascript">
function change(tmp)
{
var param=encodeURIComponent(tmp);
alert(param);
var req="<%=basePath%>to.jsp?req=";
window.location.href=req;
}

</script>
</head>
<body>
<a href="javascript:change('{'className':'Overlook','methodName':'overlook',params:[]}')">跳转</a>
</body>
</html>

如果change不带参数则可以正常调用,但是调用change时需要传参,所以会报出Uncaught SyntaxError: Unexpected identifier,该如何处理呢?求解

很明显,change(tmp) 函数的参数 tmp 应该是字符串,而在你的代码中,调用时传入的参数是:

'{'className':'Overlook','methodName':'overlook',params:[]}'

上面的“字符串”在第一个“{”时就已经结束了,导致 className 及之后的字符成为了 unexpected identifier,因而报错。

JavaScript 中,表示字符串的引号不能与字符串内的引号混用,所以要使用不同的符号:

"{'className':'Overlook','methodName':'overlook',params:[]}"

考虑到在 HTML 中嵌入 JavaScript 代码,还要注意替换特殊符号(双引号):

&quot;{'className':'Overlook','methodName':'overlook',params:[]}&quot;

不过,按照规范,最好将 JavaScript 字符串内的特殊符号(引号)替换为对应的转义字符:

'{\'className\':\'Overlook\',\'methodName\':\'overlook\',params:[]}'

 或者:

&quot;{\'className\':\'Overlook\',\'methodName\':\'overlook\',params:[]}&quot;

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-21
<a href="javascript:change({'className':'Overlook','methodName':'overlook',params:[]})">跳转</a>
相似回答