在HTML的标签中,当onclick属性中的javascript传入的参数包含单引号或者双引号时,会包JS错误。
例如:
<input onClick="doSomething('${param}');" type="button" />
当后台传来的param字符串带有单引号或者双引号时,
IE6在载入页面时直接报错,
FF载入页面虽然没有报错,但是点击按钮后没有反应,用firebug查看控制台,会看到也有错误信息。
原因就是参数中的单引号或双引号使得<input>标签没有正确的结束。
我尝试一些办法:
1.解决方案1:解决单引号问题
<c:set var="temp_param" value='${fn:replace(param,"\'","\\\\\'")}' />
<input onClick="doSomething('${temp_param}');" type="button" />
2. 解决方案2: 解决双引号问题
<c:set var="temp_param" value="${fn:escapeXml(param) }"/>
<input onClick="doSomething('${temp_param}');" type="button" />
想问问大家,还有没有更好的方法,可以同时解决单、双引号的问题?
谢谢!
PS:
<c:set var="temp_param" value="${fn:replace(param,'\"','\\\\\"')}" />
<input onClick="doSomething('${temp_param}');" type="button" />
这样是无法正确解决双引号问题的。
<input type="button" οnclick="alert('\'aaa');" value="alert" />
把引号转成上面那样就可以了 --- 共有 3 条评论 ---
谢谢你的回答,在你的提醒下,我最后只能用下面的方法来解决问题:
<c:set var="temp_param1" value="${fn:escapeXml(param1) }"/>
<c:set var="temp_param1" value='${fn:replace(temp_param1,"'","\\\\\'")}' />
<input type="button" onclick="test('${temp_param1}');" value="param2" /><br/>
还是找不到能够一步到位的方法。
虽然fn:escapeXml可以将单引号和双引号都转义为:' 和 "
但是'(单引号)作为JS的参数还是会报错,所以,我又只有再转义'为 \' ,只有 \' 不会报错。
评论(0) 引用此答案 举报用我的方法,永远不会出现问题,加一个ID属性就可以了
<input type="button" id="btnTest" value="param2" />
<script for="btnTest" event="onclick" type="text/javascript">test('${temp_param1}')</script>
评论(0) 引用此答案 举报
引用来自“opal”的答案
用我的方法,永远不会出现问题,加一个ID属性就可以了
<input type="button" id="btnTest" value="param2" />
<script for="btnTest" event="onclick" type="text/javascript">test('${temp_param1}')</script>
<script for="btn1" event="onclick" type="text/javascript">
test("${param1}");
</script>
test('${param1}');
我的解决方法:
1、输入格式控制,把单双引号不让输入(当前中文的可以输入);
2、先将数据转义后,再与onclick绑定;
把外面的双引号去掉
<
input
onClick
=
doSomething('${param}');
type
=
"button"
/>
可能的包含:单引号,双引号,还有回车等
用一个var来表示,如果有多个变量使用array来存string.
在JavaScript中调用时再从var中取.