如果事件处理程序的参数包含某些字符,则JavaScript无法正确执行
php: 如果我点击如果事件处理程序的参数包含某些字符,则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
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 = '';
}
}