2017-03-06 255 views
3

textarea我需要在提交后保留提交的值和格式,但由于某些原因,\ n似乎无法从变量php变量中传递。Textarea值不保留换行符

$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?

+0

在PHP backslesh“\”有阻止某事的作用。 – b2ok

回答

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>' 
+0

感谢大家谁提供的建议解决方案,遗憾的是没有这些答案在传递会话变量时起作用。但是,这给了我一个简单的黑客的想法,即使它不是很干净。我通过json_ecoded会话变量,然后传递变量通过'SUBSTR($文本,1,-1)'删除起始和结束的报价,因此它可以通过JS解析。出于某种原因,JSON.parse不能按预期工作。谢谢。 – nickyb

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>' 
?> 

enter image description here

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>' 

无论是这两种方法的应该工作。

+1

由于我使用nl2br在功能的另一部分是可变的,但我不相信textarea的可以解析
标签,因为当我曾尝试它显示
为文本。所以,我目前恢复的
标签后面的\ n与strreplace:'$文字= str_replace函数(“
”,‘\ n’,$文本);' – nickyb

0
$text = '1\n2\n3'; 

改变双引号标志:

$text = "1\n2\n3"; 

在PHP双引号“和单引号'不能解析相等,我们需要用双引号,像这样的东西

为: $文字= “\ 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>