使用document.write时,如果发现没有输出来,请注意有没有“\”存在,如果存在将其换掉,如:\"换成',即可正常输出!
我们在后台拼写Html时因为"必须转义,故加上了\,而在javascript中\一般用于正则表达式的关键字符,
这样我们拼出来的字符串,javascript可能不会认为是html而是正则表达式,所以没有输出来?
2012-8-2 16:04
2012-8-2 22:00
我发现我上面的猜测是错误的,具体分析原来是这样的:(如果你感兴趣,可以跟着我的思路看下这个例子)
test.html页面:<script type="javascript" src="Handler.ashx"></script>//正确吧!
Handler.ashx:
string code="<div onclick=\"add('a','b');\" >中国</div>";//正确吧!记为@
HttpContext.Current.Response.Write("document.write(\"" + code + "\");");//也正确吧!
但是一调试你会发现‘中国’两个字就是出不来,不信你试试!
如果将@改为
string code="<div onclick='add('a','b');' >中国</div>";//正确吧!
‘中国’是显示了,但add('a','b')死活是不调用,为什么呢?因为onclick方法必须用双引号括起来,
你会说那用说双引号不就完了吗,问题又回到了@处,'中国'压根不显示了。
原因到底在何处?调试 Handler.ashx,发现它显示
document.write("
中国
");
查看源码发现:错误终于露出马脚了,双引号已经把document.write事件划成两半了,这怎么能显示出'中国'呢?
查看源码发现:
document.write("<div onclick="add('a','b');">中国</div>");
那这种问题怎么处理呢?知道错误的原因就简单了,把@改为:
string code="<div onclick=\\\"add('a','b');\\\" >中国</div>";//这才是最正确的!!