なぜtextareaは神秘的な空白で埋められているのですか?


292

次のような形式の単純なテキスト領域があります

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
    <?php if($siteLink_val) echo $siteLink_val; ?> 
</textarea>

このtextareaに余分な空白が増え続けます。タブを押すと、カーソルはテキストエリアの中央にあり、最初ではありませんか?説明は何ですか?

回答:


484

コードをよく見てください。その中には、すでに3つの改行があり、前に大量の空白があり</textarea>ます。最初にそれらを削除して、タグの間に改行がないようにします。それはすでにトリックをしているかもしれません。


4
@ user79685どういたしまして。上記の私の新しいコメントを読んでください、私はあなたを本当に嘲笑していませんでした。少なくとも平均的な方法ではありません:)
Pekka

9
うーん、私はそれに同意しません。私はオンラインディスカッションでのタクトとエチケットが大好きで、SOの全体的に非常にフレンドリーな口調を楽しんでいます。一方、ネット上を動き回るときは、少し肌を発達させる必要があります。
Pekka

2
非常に素晴らしい。私もこの問題に直面しており、テキストのトリミングから 'cssを使用して' text-index 'プロパティを適用するまでのあらゆるトリックを試しました:-D :-D。(なんてばかげている)。コードをhtmlでインデントしたため、問題が発生しました:-?...おかげで、あなたの回答も
役に立ち

3
また、valueタグ内にテキストを追加する代わりに属性を使用します。
ジョアン・クーニャ

2
オールディーズだがグッディー。これは今日私を助けました。@Pekkaあなたは素晴らしいです!
ワードマン2014

73

まあ、間のすべてのもの <textarea>とは、</textarea>あなたのテキストエリアボックスのデフォルト値として使用されます。あなたの例にはいくつかの空白があります。そのすべてを排除するようにしてください。


4
どうもありがとう。その間のすべてがデフォルトであることを知りませんでした。彼が私をあざ笑ったが、彼が最初に答えたので、私は一番上の男を選びました。人々のために突き出してくれてありがとう。
2010

2
それは簡単です。どうもありがとう!
Sergio Belevskij

56

タグの直後と前に、PHPタグを開きます(閉じます!)textarea

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php
  if($siteLink_val) echo $siteLink_val;
?></textarea>

4
これは、これらの場合にインデントを維持するための賢い方法です。ありがとう!
Sebastianb

これでようやく私の問題が解決しました。バートに感謝
スティーブンケネディ

32

つまり <textarea>、開始したのと同じ行ですぐに閉じる必要があります。


一般的な方法:これは、コードのインデントに使用される改行とスペースを追加します。

<textarea id="sitelink" name="sitelink">
</textarea>

正しい練習

<textarea id="sitelink" name="sitelink"></textarea>

私の問題を解決しました。
S.M_Emamian 2017年

これも私にとって完璧な解決策でした
シェルドンR.

私の問題を解決しました、素晴らしい解決策。ありがとう
Husnain Shabbir

26

基本的には

<textarea>something here with no spaces in the begining</textarea>

いくつかの定義済みのスペースがある場合は、以下のようなコードの書式設定により、

<textarea>.......
....some_variable
</textarea>

ドットで示されるスペースは、送信ごとに追加され続けます。


これは古い「トリック」で、時々忘れられます。これに基づいて、IE6 / 7に戻ると、HTMLの問題が既に発生していました.. +1
JonSnow

私の日を救った。ありがとう!
Reuel Ribeiro

それはうまく動作しますが、それは本当に面白いです。この奇妙なバグについて何か説明はありますか?
加納

11

textareaの開始タグと終了タグの間のスペースは、空白と見なされます。したがって、上記のコードの場合、正しい方法は次のとおりです。

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo $siteLink_val; ?></textarea>

7

別の回避策は、javascriptを使用することです。

//jquery
$('textarea#someid').html($('textarea#someid').html().trim());

//without jquery
document.getElementById('someid').innerHTML = document.getElementById('someid').innerHTML.trim();

これは私がやったことです。コード内の空白と改行を削除すると、行が長くなります。


5

少し見栄えを良くするには、三項演算子の使用を検討してください。

<textarea><?=( $siteLink_val ? $siteLink_val : '' );?></textarea>

2
短いタグを使用しないでください。他の人に使用を勧めないでください。これは、いくつかのwebappを異なる構成の本番サーバーに配置するときに、PITAを回避するのに役立ちます。ありがとうございました。
アルファブラボ、2010

4
テンプレートのシナリオでは常に短いタグを使用します。これは、より多くの人々に短いタグを使用してほしいためです。そのため、PHPコミュニティがそれらを引き続きサポートするように奨励しています。つまり、短いタグは、テンプレートシナリオでのみ使用し、アプリケーションロジックでは使用しないでください。また、サーバーがサポートしている場合にのみ使用してください。展開する前に、常に運用環境を把握してください。(当然、ここは短いタグの長所と短所を議論する場所ではありませんが、あなたがそれを育てたので、それは私の正当化です。)
ブライアンレイシー

4
<textarea style="width:350px; 
 height:80px;" cols="42" rows="5" name="sitelink"
 ><?php if($siteLink_val) echo $siteLink_val; ?></textarea> 

移動...>下への移動は私にとってはうまくいきます。


4

同じ問題が発生しましたが、解決策は非常に簡単です。新しい行を開始しないでください!以前の回答のいくつかは問題を解決できますが、アイデアは明確に述べられていません。重要な理解はちょうどあなたの開始タグの後に新しい行を開始し、意図しないスペースを取り除くために、ことはありません。

次の方法は間違っており、テキストコンテンツの前に多くの不要なスペースが残ります。

 <textarea>
    text content // start with a new line will leave a lot of unwanted spaces
 </textarea>

それを行う正しい方法は次のとおりです。

 <textarea>text content //put text content right after your start tag, no new line
 </textarea>

3

後に改行やスペースがないことを確認してください。空白やタブがないことを確認してください。このコードをコピーして貼り付けてください:)私はあなたのために修正しました

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo trim($siteLink_val);?></textarea>


2

内部に空白を追加せずにtextareaコードを保持する

さらに、余分な空白行が表示される場合は、メタ言語での解決策があります。

<textarea>
for line in lines:
echo line.replace('\n','\r')
endfor
</textarea>

もちろん、追加の空白行なしで行を印刷します。行が '\ n'、 '\ r \ n'または ''で終わるかどうかによって異なります-適応してください


2

タグには実空間が存在するため、テキスト領域は不思議な空間を示しています。<textarea> <php? echo $var; ?> </textarea> タグ間のこれらの余分なスペースを削除すると、次のように問題が解決します。 <textarea><php? echo $var; ?></textarea>


2

white-space: normal;時々すべての空白を削除することが現実的でないため、私にとってうまくいった解決策の1つは、textareaにスタイルを追加することです(たとえば、タブ、空白、改行を追加する必要があるコーディングガイドラインにコードを準拠させたい場合など)。

textareaのデフォルトは、少なくともchromeであることに注意してください: white-space: pre-wrap;


2

インデントを引き続き使用する場合は、<?phpタグを開いた後に次のようにしてください。

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php // <--- newline
    if($siteLink_val) echo $siteLink_val; // <--- indented, newline
?></textarea>

2

私は遅いことを知っていますが、他の人を助けるかもしれません。

ドキュメントのインデントが必要な場合に使用します。

$('document').ready(function()
{
    $('textarea').each(function(){
            $(this).val($(this).val().trim());
        }
    );
});

同じ質問


または、htmlを正しくフォーマットすることもできます。しかし、その中にphpコードのようなものが必要な場合は、それが難しい場合があることに同意します。だから私はあなたの答えに同意します。
Niels Lucas

1

PHPコードと混合したHTMLコードに反対しています。

しかし、これを試してください:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
<?php 
    if($siteLink_val) 
        echo trim($siteLink_val);
?> 
</textarea>

3
ほとんど...まだ2つの改行が含まれています。
アマリオン

使用<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php?></textarea>て、それが本当に純粋であることを確認する必要があります 。また、PHPでHTMLに反対している理由を聞かせてもらえますか?
FluorescentGreen5

1

あなたとあなたの閉じるタグを同じ行で定義するだけです。

<textarea class="form-control"
          id="newText"
          rows="6"
          placeholder="Your placeholder here..."
          required
          name="newText"></textarea>

0

また、カーソルがテキストエリアの「中央」にあると言うと、CSSのどこかに追加のパディングまたはtext-align:centerを定義することもできると思います。


0

最初に、$ siteLink_valが値として空白を返さないことを確認してください。<textarea>要素のデフォルト値は空なので、なんらかの理由でエコーしている変数にスペースがある場合、問題はすぐに発生します。

コードを最もクリーンなものにするために、私はあなたがこのようなことをすることをお勧めします。それにより、後でいくつかの柔軟性を可能にします。変数が存在しない場合はNULL(元の投稿で目指していたように見える)と、それ以外の場合は絶対値のいずれかを返す関数を作成しました。変数の内容を確認したら、次のことを試してください。

function build_siteLink_val() {
     if ( $siteLink_val ) {
          return $siteLink_val;
     }

     else {
          return "";
     }
}

$output_siteLink_val = build_siteLink_val();

そして、あなたのtextareaの次のコードは今読むでしょう:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?=$output_siteLink_val?></textarea>

これは、短縮された「<?=?>」タグに見られるように、PHPインストールが省略形の変数呼び出し用に構成されていることを前提としています。この方法で出力できない場合は、PHPコードの前に必ず「<?php」を付け、最後に「?>」を付けてください。

<textarea>の間に改行を入れないでください。誤った文字になる可能性があります。

また、CSSをチェックして、テキストを内側に押し込むパディングルールがないことを確認してください。

また、textareaでcolsとrowsの値を指定してから、幅と高さのスタイルを設定します。これらのルールは逆効果であり、結果として一貫性のないビジュアルになります。サイズ(スタイルには要素を指定することをお勧めします)または行/列でサイズを定義します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.