如果事件处理程序的参数包含某些字符,则JavaScript无法正确执行

如果事件处理程序的参数包含某些字符,则JavaScript无法正确执行,javascript,php,Javascript,Php,php: 如果我点击textareaid='aa1',什么都不会发生 如果我单击textarea id='aa2'或textarea id='aa3',则会打印“good”,但字段值不会发生任何变化 如果我单击textareaid='aa4',则会打印“good”,并且字段的值为“” 我希望像AAA\r\nBBBB\\CCC这样的字符串可以像textareaid='aa4那样工作 我该怎么做 我读了下面的帖子,但似乎对我的处境没有帮助: 更新: 我已将$str1替换为json_encode

php:

如果我点击
textareaid='aa1'
,什么都不会发生

如果我单击
textarea id='aa2'
textarea id='aa3'
,则会打印“good”,但
字段值不会发生任何变化

如果我单击
textareaid='aa4'
,则会打印“good”,并且
字段的值为“”

我希望像
AAA\r\nBBBB\\CCC
这样的字符串可以像
textareaid='aa4
那样工作

我该怎么做

我读了下面的帖子,但似乎对我的处境没有帮助:


更新:

我已将
$str1
替换为
json_encode($str1)
,因此
alert()现在可以正常工作了。(感谢Jordan Running。)

但是
字段.value
部分仍然不起作用

在我的情况下,代码重构太难了。。。有没有办法在不进行代码重构的情况下处理
字段.value
问题


如果引号损坏了我的HTML,我可以将
$str1
放在
htmlspecialchars()
中,并在

中显示它。一般来说,使用字符串连接来构建JavaScript是个坏主意。PHP代码生成以下HTML:


这是有效的HTML,但是
onfocus
属性中的代码不是有效的JavaScript。在JavaScript中,字符串字符串中间不能有断线。您可以在模板文本中使用换行符(即,
`其中一个`
),但这不是正确的解决方案

快速但短视的解决方案 当需要将某些数据“注入”到JavaScript块中时,应始终使用:

$str1=“AAA\r\nBBBB\\CCC”;
回声“;
仔细记下上面的引号。因为
json\u encode
将字符串用引号括起来,所以
周围不需要额外的引号。json编码($str1)。

这将生成以下HTML:


…其
onfocus
处理程序工作正常,如您在此代码段中所见:

function erase(…args){console.log('用',args调用erase);}

JS字符串无法处理换行符。如果需要CRLF,可以对它们进行JSON编码检查错误控制台?从另一种语言构建JS字符串是个坏主意。考虑研究不显眼的JS。如果引用损坏了我的HTML,我可以在<代码> HTMLPrimeCARS()/<代码>中输入<代码> $STR1<代码>,并将其显示在<代码> <代码>中。有没有办法在不进行代码重构的情况下处理
字段.value
问题@JordanRunning@Saturn如果你不解释问题是什么,就很难帮助你解决问题。但是,我有一种感觉,问题是您正在将
AAA\r\nBBBB…
AAA\nBBBB…
进行比较。看这个相关的问题:如果你仍然有问题,发布一个新的问题。
$str1 = "AAA\r\nBBBB\\CCC";
echo"<textarea id='aa1' onfocus='erase(\"".$str1."\", \"aa1\");'></textarea>";
$str2 = "AAABBBB\\CCC";
echo"<textarea id='aa2' onfocus='erase(\"".$str2."\", \"aa2\");'></textarea>";
$str3 = "AAABBBB\CCC";
echo"<textarea id='aa3' onfocus='erase(\"".$str3."\", \"aa3\");'></textarea>";
$str4 = "AAABBBBCCC";
echo"<textarea id='aa4' onfocus='erase(\"".$str4."\", \"aa4\");'></textarea>";
function erase(str, id)
{
    alert("good");
    var field = document.getElementById(id);
    if(field.value == str)
    {
        field.value = '';
    }
}