我有javascript功能:
function someAction(thisTd,text){
alert(text);
thisTd.innerHTML=text;
...
}
和html-file:
<td onclick="someAction(this,<?echo 'Long-long text with <b>html-formatting</b>'?>)"/>
当我使用这样的代码函数时,someAction不会调用(因为警报没有显示),并且在Opera的错误控制台中没有显示错误。如何解决这个问题?
附:我不使用框架(JQuery等)
更新#1
当我使用这样的代码时:
<?$encoded=str_replace("\n","",str_replace("\r\n","",$text));echo $encoded?>
效果很好。但我不确定它在Linux中是否正常。(我使用的是Windows)
答案 0 :(得分:2)
确保你HTML encode并在参数周围添加单引号:
<td onclick="someAction(this, '<?echo htmlspecialchars('Long-long text with <b>html-formatting</b>', ENT_QUOTES) ?>')"/>
答案 1 :(得分:2)
你应该删除echo标签和?
<div onclick="someAction(this,'Long-long text with <b>html-formatting</b>')">myDiv</div>
你的职能是:
function someAction(thisTd,text){
thisTd.nodeValue=innerHTML
...
}
答案 2 :(得分:1)
首先必须在单个或html编码的双引号中包装字符串:
<td onclick="someAction(this, '<?php echo 'yada yada'; ?>');"/>
<!-- OR -->
<td onclick="someAction(this, "<?php echo 'yada yada'; ?>");"/>
其次,“echo”ed输出可以包含单引号或双引号,可以破坏javascript字符串或html属性。假设您使用单引号来包装回显的字符串:
<td onclick="someAction(this, '<?php echo htmlspecialchars( str_replace( "'", "\\'", $that_long_text ) ); ?>');"/>
答案 3 :(得分:0)
只需在文本周围加上引号,即可生成:
逻辑上,这会产生错误。
使用简单引号或转义双引号(\“)