1

テキストエリアの改行を必死にキャプチャしようとしています。テキストエリアの内容をデータベースに保存し、データベースから取得したときにテキストエリアに表示したいと考えています。テキストエリアは編集ボックスとして機能する必要があります。htmlで表示する必要はありません。

テキストエリアからのテキストを行の配列に変換し、文字 \r\n で爆発させ、それをコンマ区切りに分解することにより、テキストエリアのコンテンツをサーバーに投稿する通常の html ページでこれを機能させることができました行のリスト。次に、行を再表示したい場合は、コンマを \n に置き換え、テキストエリア内に表示できる改行付きのテキストを取得します。ちょっとしたハックですが、うまくいきます。

ただし、html を使用してテキストエリアのコンテンツをサーバーに投稿する代わりに、javascript で getElementByID を使用してそれらをプルし、javascript でサーバーに投稿すると、うまくいかないようです。

html を使用してテキストエリアのコンテンツを取得し、\r\n で爆発すると、行と同じ数の要素を持つ配列が取得されます。

ただし、javascript で getElementByID を使用してテキストエリアのコンテンツを取得し、\r\n で爆発すると、行が実行される配列内の要素が 1 つだけ取得されます。言い換えれば、私は改行を取得しません

javascriptでテキストを引っ張ると改行が消える理由を知っている人は誰でも、javascriptで改行を保持する方法について提案がありますか?

ありがとう。

短縮コード: javascript

getText() {

var textobj = document.getElementById("text");
var text = textobj.value;

...some code for AJAX


    document.getElementById("droptext").innerHTML=xmlhttp.responseText;
... some more code for Ajax

xmlhttp.open("GET","savetext.php?text="+text,true);
xmlhttp.send();
}

html

<div id="droptext"><textarea id="text"><textarea></div>
<a href="javascript:void(0);" onclick="getText();">Save Text</a>

php

$text = $_GET['text'];
$textarray = explode("\r\n", $text);
$text = implode(",",$textarray); //converts to comma delimited list

...store in database

...fetch from database and echo text back for editing

$text = $row['text'];
$text = str_replace( ",", "\n", $text);

echo '<textarea>'.$text.'</textarea>';
4

2 に答える 2

1

別の質問でこれに対する答えを見つけました。

JavaScript: HTML テキストエリアに改行を追加するには?

Javascript は、サーバーに要求を送信するときに、改行を urlencode しません。それらは基本的に消えます。そのため、リクエストの前に JavaScript で独自の URL コーディングを行う必要があります。

var text2 = text.replace("\n\r","&#13;&#10;");

他の議論では、POST および GET リクエストの urlencoding が異なる言語で異なる方法で処理されるという提案がいくつかありますが、テストしたところ、2 つの違いはわかりませんでした。

于 2012-11-22T16:06:44.450 に答える
0

コンテンツ全体を変更せずに保存することの問題は何ですか?使用しているデータベースはわかりませんが、ほとんどの場合、改行付きのテキストフィールドをサポートする必要があります。

それでも問題が解決しない場合は、「\ r \ n」を使用している可能性があります。サーバーに送信される内容を教えていただけますか?

また、phpによって返されるtextareaのidが間違っているため、getTextを複数回実行できなくなります。

于 2012-11-21T13:03:04.187 に答える