Dlaczego textarea jest wypełniona tajemniczymi białymi spacjami?


292

Mam prosty obszar tekstowy w formie takiej jak ta:

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

W tym obszarze tekstowym wciąż pojawiają się dodatkowe białe znaki . Kiedy zakładam kartę, mój kursor jest jak na środku obszaru tekstowego, a nie na początku? Jakie jest wyjaśnienie?

Odpowiedzi:


484

Przyjrzyj się dokładnie swojemu kodowi. W nim są już trzy podziałki linii i mnóstwo białej przestrzeni wcześniej </textarea>. Usuń je najpierw, aby nie było już żadnych przerw między tagami. To może już załatwić sprawę.


4
@ user79685 jesteś mile widziany. Przeczytaj mój nowy komentarz powyżej, tak naprawdę nie wyśmiałem cię. Przynajmniej nie wredny sposób :)
Pekka

9
Mmm, nie zgadzam się z tym. Bardzo lubię takt i etykietę w dyskusjach online i cieszę się ogólnie bardzo przyjaznym tonem w SO. Z drugiej strony, podczas poruszania się w sieci trzeba rozwinąć odrobinę skóry, to prawda.
Pekka

2
bardzo dobrze. Miałem też do czynienia z tym problemem i próbowałem każdej innej sztuczki, od przycinania tekstu do zastosowania właściwości „text-index” (przy użyciu css) :-D :-D. (ale głuptas ze mnie). Wystąpił problem, ponieważ wstawiłem kod w html: -? ... Dzięki, twoja odpowiedź też mi pomogła .. :-)
Gaurav Sharma

3
Ponadto użyj valueatrybutu zamiast dodawać tekst wewnątrz tagów.
João Cunha

2
Stary, ale dobry. To mi dzisiaj pomogło. @Pekka jesteś niesamowity!
wordman

73

Cóż, wszystko pomiędzy <textarea>i </textarea>jest używane jako domyślna wartość dla pola tekstowego. W twoim przykładzie jest trochę białych znaków. Spróbuj to wszystko wyeliminować.


4
wielkie dzięki. Nie zdawałem sobie sprawy, że wszystko pomiędzy jest domyślne. Wybrałam faceta na szczycie, ponieważ pierwszy odpowiedział, chociaż wyśmiał mnie. Dzięki za trzymanie się ludzi.
Afamee

2
To proste. Wielkie dzięki!
Sergio Belevskij

56

Otwórz (i zamknij!) Tagi PHP zaraz po tagach i przed nimi textarea:

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

4
jest to sprytny sposób na zachowanie wcięcia w tych przypadkach. Dzięki!
Sebastianb

To ostatecznie rozwiązało mój problem. Wielkie dzięki Bart
Stephen Kennedy

32

W skrócie: <textarea>należy natychmiast zamknąć w tej samej linii, w której się zaczął.


Ogólna praktyka: spowoduje to dodanie podziałów wiersza i spacji używanych do wcięcia w kodzie.

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

Prawidłowa praktyka

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

Rozwiązałem mój problem.
S.M_Emamian

To było również idealne rozwiązanie dla mnie
Sheldon R.

Rozwiązałem mój problem, świetne rozwiązanie. Dzięki
Husnain Shabbir,

26

Zasadniczo powinno być

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

Jeśli są jakieś predefiniowane spacje, powiedzmy ze względu na formatowanie kodu, jak poniżej

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

Spacje wyświetlane kropkami są dodawane przy każdym przesyłaniu.


To stara „sztuczka”, czasem nawet zapomniana. Mieliśmy już problemy z HTML oparte na tym, wracając do IE6 / 7 .. +1
JonSnow

Uratowałem mój dzień. Dzięki!
Reuel Ribeiro

Działa dobrze, ale jest naprawdę zabawny. Jakieś wyjaśnienie tego dziwnego błędu?
Aminu Kano

11

Wszelkie odstępy między znacznikami otwierania i zamykania obszaru tekstowego będą traktowane jako białe znaki. Tak więc w przypadku powyższego kodu poprawną metodą będzie:

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

7

Innym rozwiązaniem byłoby użycie javascript:

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

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

Oto co zrobiłem. Usunięcie białych znaków i podziałów linii w kodzie powoduje, że linia jest za długa.


5

Aby wyglądał nieco czystiej, rozważ użycie operatora trójskładnikowego:

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

2
Nie używaj krótkich tagów, nie sugeruj tego innym. Pomoże to ludziom uniknąć PITA podczas umieszczania aplikacji internetowej na serwerze produkcyjnym z inną konfiguracją. Dziękuję Ci.
Alfabravo

4
Zawsze używam krótkich tagów w scenariuszach szablonowych właśnie dlatego, że chcę, aby więcej osób ich używało, a tym samym zachęcam społeczność PHP do dalszego ich wspierania. To powiedziawszy, krótkie tagi powinny być używane TYLKO w scenariuszach szablonowych, NIGDY w logice aplikacji i oczywiście, oczywiście, gdy serwer je obsługuje. Przed wdrożeniem zawsze poznaj swoje środowisko produkcyjne. (Oczywiście nie jest to miejsce do omawiania zalet i wad krótkich tagów, ale poruszyłeś to, więc to moje uzasadnienie.)
Brian Lacy

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

Przenoszenie ...> w dół działa dla mnie.


4

Mam ten sam problem, a rozwiązanie jest bardzo proste: nie zaczynaj nowej linii! Chociaż niektóre z poprzednich odpowiedzi mogą rozwiązać problem, pomysł nie jest jasno określony. Ważne jest zrozumienie, aby pozbyć się niechcianych miejscach, nigdy nie rozpocząć nowy wiersz tuż po tagu początkowego.

Poniższy sposób jest NIEPRAWIDŁOWY i pozostawi wiele niepożądanych miejsc przed treścią tekstu:

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

PRAWIDŁOWY SPOSÓB na to:

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

3

Upewnij się, że później nie ma podziału wiersza ani spacji, aby upewnić się, że nie ma białych znaków ani tabulacji, po prostu skopiuj i wklej ten kod :) Miałem go naprawić

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

2

Ponadto: znacznik textarea pokazuje spacje dla nowych linii, tabulatorów itp. W kodzie wielowierszowym.


2

zachowaj kod textarea bez dodatkowych białych spacji w środku

ponadto, jeśli zobaczysz dodatkowe puste linie, istnieje rozwiązanie w języku meta:

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

wypisze linie bez dodatkowych pustych linii, oczywiście zależy to od linii kończących się na „\ n”, „\ r \ n” lub „” - proszę dostosować


2

Obszar tekstowy pokazuje tajemnicze spacje, ponieważ w tagach istnieje prawdziwa przestrzeń. <textarea> <php? echo $var; ?> </textarea> po usunięciu tych dodatkowych spacji między tagami rozwiąże problem w następujący sposób. <textarea><php? echo $var; ?></textarea>


2

Jednym ze sprawdzonych rozwiązań jest dodanie stylu white-space: normal;do obszaru tekstowego, ponieważ czasami nie jest możliwe wyeliminowanie wszystkich białych znaków (na przykład, gdy chcesz, aby kod był zgodny ze wskazówkami dotyczącymi kodowania, co wymaga dodania tabulatorów, białych znaków i podziałów wiersza)

Należy pamiętać, że domyślnym obszarem tekstowym, przynajmniej w chrome, jest: white-space: pre-wrap;


2

Jeśli nadal chcesz używać wcięcia, zrób to po otwarciu <?phptagu, tak jak poniżej:

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

2

Wiem, że jest późno, ale może pomóc innym.

użyj tego, gdy wymagane jest wcięcie dokumentu.

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

to samo pytanie


Lub możesz poprawnie sformatować swój HTML. Ale zgadzam się, że może być coś trudnego, jeśli chcesz w nim coś takiego jak kod php. Zgadzam się więc z twoją odpowiedzią.
Niels Lucas,

1

Jestem przeciwny kodowi HTML pomieszanemu z kodem PHP.

Spróbuj jednak:

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

3
Prawie ... to wciąż obejmuje dwie nowe linie.
amarillion

Powinien używać <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php i ?></textarea>upewnić się, że jest naprawdę czysty. Czy mogę również zapytać, dlaczego popierasz HTML w PHP?
FluorescentGreen5

1

Po prostu zdefiniuj swój i swój zamknięty tag w tej samej linii.

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

0

Ponadto, gdy mówisz, że kursor znajduje się na „środku” obszaru tekstowego, myślę, że możesz również mieć dodatkowe dopełnienie lub wyrównanie tekstu: środek określone gdzieś w twoim CSS.


0

Najpierw upewnij się, że $ siteLink_val nie zwraca wartości jako spacji. Element <textarea> domyślnie ma pustą wartość, więc jeśli zmienna, z której się powtarzasz, ma spacje, to od razu masz problem.

Aby kod był absolutnie najczystszy, sugerowałbym, abyś mógł zrobić coś takiego, pozwalając na większą elastyczność później. Zrobiłem funkcję, która zwraca albo NULL, jeśli zmienna nie jest obecna (co wydaje się celem w oryginalnym poście), a wartość bezwzględna w przeciwnym razie. Po upewnieniu się o zawartości zmiennej spróbuj:

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

     else {
          return "";
     }
}

$output_siteLink_val = build_siteLink_val();

A następujący kod w twoim obszarze tekstowym będzie teraz brzmiał:

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

Zakłada się, że instalacja PHP jest skonfigurowana do wywoływania zmiennych krótkich, co widać w skróconych znacznikach „<? =?>”. Jeśli nie możesz wydrukować w ten sposób, pamiętaj, aby poprzedzić kod PHP słowem „<? Php” i zamknąć słowem „?>”.

Unikaj podziałów linii pomiędzy <textarea>, ponieważ może to stworzyć potencjał błędnych znaków.

Sprawdź także CSS, aby upewnić się, że nie ma reguły wypełniania wypychającej tekst do wewnątrz.

Ponadto określasz wartość cols i wierszy w obszarze tekstowym, a następnie projektujesz szerokość i wysokość. Reguły te przynoszą efekt przeciwny do zamierzonego i będą powodować niespójne efekty wizualne. Trzymaj się albo określając rozmiar poprzez styl (zalecam nadanie elementowi klasy), albo wiersze / cols.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.