Textarea值不保留变量的换行符

时间:2017-03-06 18:19:51

标签: javascript php jquery html

我有一个textarea需要在提交后保留提交的值和格式,但由于某种原因\ n似乎没有从变量php变量传递。

$text = '1\n2\n3';

echo '<script>
var text = "'.$text.'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'

变量从php传递给JS。当我回显变量时,我得到了预期的结果:

1\n2\n3

当变量分配给textarea值时,结果为:

123

而不是:

1
2
3

现在,如果我将js更改为以下内容,我会在新行上获得每个数字的预期结果。

$("textarea").val("1\n2\n3");

有谁知道为什么php变量没有将\ n返回给JS?

4 个答案:

答案 0 :(得分:1)

使用json编码应该以JS将理解的方式逃避换行符。

$text = json_encode('1\n2\n3');

echo '<script>
var text = JSON.parse("'.$text.'");
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'

答案 1 :(得分:0)

你应该使用它。

    <script   src="https://code.jquery.com/jquery-3.1.1.min.js"   integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="   crossorigin="anonymous"></script>

<textarea rows="4" cols="50">
</textarea>


<?php

$text = '1\n2\n3';

echo '<script>
var text = "'.$text.'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'
?>

PHP manual clearly states

答案 2 :(得分:0)

问题是你期望浏览器Javascript能够理解PHP的“\ n”字符。那样不行。此外,您的代码使用单引号来表示换行符。 PHP要求您使用双引号来表示换行特殊字符。

至少有两种方法可以解决这个问题。

首先是使用PHP的nl2br()函数。在这种情况下,您的代码可以重写为:

$text = "1\n2\n3"; //notice the use of double quotes.

echo '<script>
var text = "'. nl2br($text).'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'

第二种方法是直接在变量声明中使用HTML
标记。这样可以避免使用PHP的nl2br()函数。

$text = '1<br>n2<br>n3';

echo '<script>
var text = "'.$text.'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'

这两种方法都应该有效。

答案 3 :(得分:0)

$text = '1\n2\n3';

更改为双引号:

$text = "1\n2\n3";

在PHP双引号“和单引号”不解析相等。对于我们需要使用双引号的东西,像这样。

有关: $ text =“\ n1 \ n2 \ n3 \ n”;

源页面视图将是:

<script>
var text = "
1
2
3
";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>