2017-03-06 5 views
3

提出後にサブミットされた値とフォーマットを保持する必要があるテキストエリアがありますが、何らかの理由で\ 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に渡されます。

123 

の代わりに::

1 
2 
3 

かの変数が結果がテキストエリアの値に割り当てられている

1\n2\n3 

:私は、変数をエコーすると、私は予想される結果を得ます私は次のようにjsを変更します。私は新しい行の各番号で期待される結果を得ます。

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

php変数が\ n返品をJSに渡さない理由は誰にも分かりますか?

+0

PHPのバックスラッシュには、「\」が何かをブロックする役割を持っています。 – b2ok

答えて

1

json encodeを使用すると、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($ text、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

問題は、PHPの "\ n" は文字を理解するために、ブラウザのJavascriptを期待しているです。それは動作しません。また、あなたのコードは改行文字を示すために一重引用符を使います。 PHPでは、改行特殊文字を表すために二重引用符を使用する必要があります。

これを修正するには少なくとも2つの方法があります。

最初に、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を使用しますが、テキストエリアがテキストとして
を表示しようとしたので、
タグを解析することができるとは思わない。だから私は現在
のタグをstrreplaceで\ nに戻しています: '$ text = str_replace( '
'、 '\ n'、$ text);' – nickyb

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> 
関連する問題