0

解決した

問題はトリッキーな方法で解決されます。答えは以下に掲載されています。


これは、white-space: pre;新しいものを編集し、データベースに保存し(そのまま、 with \r\n)、htmlページのインライン部分として表示します(同じスタイルのdiv内)。

この問題は、AJAX 応答からフィードされた同じテキストエリアを使用して、ポップアップ ダイアログでそのようなテキストを編集しようとすると発生します。jQueryを使用して、受信したテキストをテキストエリアに割り当てようとしています:

$('#textfield').html(text);

実際には、テキストエリアが入力されたダイアログ全体が応答で受信されます。

残念ながら、この html-setter は先頭の改行を削除します。このような一貫性のない動作を排除する方法はありますか? コンテンツ内でさらに発生する改行は、通常どおり保存されます。

サーバーから受信した html コードの例:

<textarea id="newtext" cols="60" rows="3" style="white-space:pre;">
Text with line break at its start.
More line break</textarea>

htmlコンテナにコードを配置した後、私はまさにこれを得ました:

<textarea id="newtext" cols="60" rows="3" style="white-space:pre;">Text with line break at its start.
More line break</textarea>

PS コンテキストからさらにコードが追加されましたが、これが何らかの形で役立つとは思いません。

JavaScript:

var d = $('#dialog');

console.log(msg); // correct data
console.log('==============');

d.html(msg).css({position: "absolute", top: (pos.top + height) + "px", left: (pos.left + width) + "px"});

console.log(d.html()); // corrupted data

d.show();
$('#newtext').focus();

コンテナ付き HTML :

<div id="dialog" class="popup">
</div>

アップデート:

@Pointy が示唆したように、実際には jQuery の問題ではありません。html-setter をプレーンな古いものに置き換えました。

document.getElementById("dialog").innerHTML = msg;

同じ問題が発生しました。ブラウザはクロームです。現在、他のブラウザをテストできません。

4

3 に答える 3

2

実際に を使用している場合は<textarea>、.html の代わりに .val を使用してください。

編集-あちこちに物を挿入している場合、これは必要なものに少し近いかもしれません...

var textarea = $("<textarea>").val(query);
$(".div-container").append(textarea);
//or, if you're going to replace the one in there
$(".div-container textarea").replaceWith(textarea)

基本的には、テキストエリアへの jquery 参照を使用して変数を割り当てることができ、それを取得して必要な場所に配置できるということです。

于 2012-12-07T20:16:57.150 に答える
0

新しい行をsに置き換えるためtext = text.match(/[^\n]+/g).join('<br>');に使用する前にできますか?.html(text)<br>

于 2012-12-07T21:02:49.060 に答える
0

非常に簡単な回避策があります。テキストエリアの元の HTML コードに:

<textarea id="newtext" cols="60" rows="3" style="white-space:pre;"><?php echo $templateVariablePlaceholder; ?></textarea>

タグを開いた後に改行を追加しました:

<textarea id="newtext" cols="60" rows="3" style="white-space:pre;">
<?php echo $templateVariablePlaceholder; ?></textarea>

期待どおりに機能するようになりました。

于 2012-12-07T21:30:39.403 に答える