使用jQuery,当MySQL的值包含换行符时,我如何设置文本区域的内容


Using jQuery how can I set the contents of a textarea when the value from MySQL contains newlines

为了保持我的代码整洁,我默认使用jQuery的每个表单元素。

。我的表单包含如下元素:

<input name="mobile" id="mobile" type="text" />

在我单独的javascript文件中,我从MySQL读取数据,然后使用jQuery设置它,在表单加载后。

$('#mobile').val('07845 887766');

这个值是从MySQL读取的,我在PHP中生成如下代码:

echo "'n $('#mobile').val('".$user['mobile']."');";

这工作得很好,但问题在于当有一个textarea字段…

<textarea name="notes" id="notes" ></textarea>
echo "'n $('#notes').html('TEST');";

这工作得很好,但是当我用数据库中的数据替换它时,它可以包含换行符,我得到一个javascript错误。

echo "'n $('#notes').html('".$user['notes']."');";

这会产生以下代码(实际值…)

$("#notes").html("INSERT INTO action    (
                    inputdate,
                )
                VALUES ()");

给出一个错误。"未终止字符串"

可以是单引号而不是双引号,试试这个:

echo PHP_EOL.'$("#notes").html("'.$user['notes'].'");';

未终止字符串字面值

你得到这个消息是因为在Javascript中你不能跨多行文本字符串。

您需要做的是将$user['notes']中的换行符替换为字符'r'n,这样所有字符串都在一行上,然后<textarea>输入将正确地在新行上显示每个项目。

让我们使用json_encode来帮助我们转义Javascript不喜欢的讨厌的字符。

// This will convert to be Javascript friendly. 
// Output string will be enclosed in quotes " "
$notes_str = json_encode($user['notes']);
echo "'n $('#notes').html(" . $notes_str . ");";

将行返回替换为'n,如下所示:

echo "'n $('#notes').html('".str_replace("'n","''n",$user['notes'])."');";

php不是我最擅长的,所以语法可能有点不合适。但是基本上用字符"'n"替换行返回。(我猜可能也需要处理/r,或者两者的组合)

编辑:显然,如果你使用PHP 5.2或更高版本,你可以使用json_encode(,它将处理引号和换行符

如果你正在使用smarty模板引擎,你可以这样使用——

$('textarea#myTextAreaId').val({$arrVal.keyValue|@json_encode});

通常会遇到这个问题,因为目前textarea元素上的.val()会去掉回车。