Чому textarea заповнена таємничими білими пробілами?


292

У мене є проста текстова область у такій формі:

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

Я продовжую отримувати зайвий простір у цій текстовій області . Коли я вкладаю в нього, курсор знаходиться як посеред текстової області, а не на початку? Яке пояснення?

Відповіді:


484

Подивіться уважно на свій код. У ньому вже три перерви лінії, а тонна білого простору раніше </textarea>. Видаліть їх першими, щоб більше не було розривів рядків між тегами. Це вже може зробити трюк.


4
@ user79685 ласкаво просимо. Читай мій новий коментар вище, я насправді не знущався над тобою. Принаймні, не середньо: :)
Pekka

9
Ммм, я не згоден з цим. Я дуже за такт і етикет в онлайн-дискусіях, і мені подобається загальний дуже доброзичливий тон на SO. З іншого боку, потрібно рухатись шкірою під час руху по мережі, це правда.
Pekka

2
дуже хороша. Я також стикався з цією проблемою і намагався будь-який інший трюк - від обрізання тексту до застосування властивості 'text-index' (використовуючи css) :-D :-D. (як дурно мені). Проблема виникла через те, що я зрізав код у html: -? ... Спасибі, ваша відповідь мені теж допомогла .. :-)
Gaurav Sharma

3
Також використовуйте valueатрибут замість додавання тексту всередині тегів.
Жоао Кунья

2
Старий, але добрий. Це мені сьогодні допомогло. @Pekka ти приголомшливий!
wordman

73

Ну, все між <textarea>і </textarea>використовується як значення за замовчуванням для вашого поля текстових повідомлень. У вашому прикладі є пробіл. Спробуйте усунути все це.


4
дуже дякую. Я не розумів, що все між ними - це за замовчуванням. Я вибрав хлопця зверху, тому що він відповів на це першим, хоча він висміяв мене. Дякуємо, що стирчали для людей.
Afamee

2
Це просто. Дуже дякую!
Серхіо Белевський

56

Відкрийте (і закрийте!) Свої теги PHP одразу після та перед вашими textareaтегами:

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

4
це розумний спосіб зберегти відступ у цих випадках. Дякую!
Себастьянб

Це остаточно вирішило мою проблему. Велике спасибі Барт
Стівен Кеннеді

32

Коротше кажучи: <textarea>слід негайно закритись на тій же лінії, де вона почалася.


Загальна практика: це додасться до розривів рядків та пробілів, які використовуються для відступу в коді.

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

Правильна практика

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

Вирішив мою проблему.
S.M_Emamian

Це було ідеальним рішенням і для мене
Шелдон Р.

Вирішив мою проблему, чудове рішення. Спасибі
Хуснейн Шаббір

26

В основному так і має бути

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

Якщо є якісь заздалегідь задані пробіли, скажемо через формат коду, як показано нижче

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

Пробіли, показані крапками, додаються під час кожного надсилання.


Це стара "хитрість", яку навіть іноді забувають. У нас уже виникли проблеми з HTML на основі цього повернення до IE6 / 7 .. +1
JonSnow

Врятував мій день. Дякую!
Реуель Рібейро

Це працює просто чудово, але це справді смішно. Будь-яке пояснення цієї дивної помилки?
Аміну Кано

11

Будь-який проміжок між тегами відкриття та закриття тегів буде розглядатися як пробіл. Отже, для вашого вищевказаного коду правильним буде такий спосіб:

<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
Не використовуйте короткі теги, не пропонуйте цим робити інших. Це допоможе людям уникнути PITA, якщо розмістити деякі веб-сторінки на виробничому сервері з іншою конфігурацією. Дякую.
Альфабраво

4
Я завжди використовую короткі теги в сценаріях шаблонування саме тому, що хочу більше людей використовувати їх, і, таким чином, заохочую PHP-спільноту продовжувати їх підтримувати. Однак, короткі теги повинні використовуватися ТОЛЬКО у шаблонах сценаріїв, НІКОЛИ у логіці програми та, очевидно, ТІЛЬКИ, коли сервер їх підтримує. Завжди знайте своє виробниче середовище перед розгортанням. (Природно, це не місце для обговорення плюсів і мінусів коротких тегів, але ви підняли це, тому це моє виправдання.)
Брайан Лейсі

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

Переміщення ...> вниз працює для мене.


4

У мене така ж проблема, і рішення дуже просте: не запускайте новий рядок! Хоча деякі попередні відповіді можуть вирішити проблему, ідея не викладена чітко. Важливо розуміння того , щоб позбутися від незапланованих просторів, ніколи не почати новий рядок тільки після відкриваючого тега.

Наступний спосіб WRONG і залишить багато небажаних пробілів перед вашим текстовим вмістом:

 <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 відображає пробіли для нових рядків, вкладок тощо у багаторядковому коді.


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;до текстової області, оскільки часом неможливо усунути всі пробіли (наприклад, коли ви хочете, щоб ваш код дотримувався ваших правил кодування, що вимагає додавання вкладок, пробілів та розривів рядків)

Зверніть увагу, що для текстових областей за замовчуванням, принаймні для хрому, за замовчуванням є: 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-коду всередині нього. Тож я згоден з вашою відповіддю.
Нільс Лукас

1

Я проти HTML-коду, змішаного з PHP-кодом.

Однак спробуйте це:

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

3
Майже ... що все ще включає два нових рядки.
amarillion

Слід використовувати <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php та ?></textarea>переконатися, що він справді чистий. Також, я можу запитати, чому ви проти HTML з PHP?
FluorescentGreen5

1

Просто визначте свій і ваш тег теги в одному рядку.

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

0

Крім того, коли ви говорите, що курсор знаходиться у "середині" текстової області, я змушую вас думати, що ви також можете мати додаткові накладки або вирівнювання тексту: центр визначений десь у вашій CSS.


0

Спершу переконайтесь, що ваш $ siteLink_val не повертає пробіл як значення. Елемент <textarea> за замовчуванням має порожнє значення, тому, якщо змінна, яку ви повторюєте, з якихось причин має пробіли, у вас проблема негайно.

Щоб зробити код абсолютним чистим, я б запропонував вам зробити щось подібне, надаючи трохи більшої гнучкості пізніше. Я створив функцію, яка повертає або NULL, якщо змінної немає (те, що вам здається, націлений у початковій публікації), і абсолютне значення в іншому випадку. Переконавшись у вмісті змінної, спробуйте:

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

     else {
          return "";
     }
}

$output_siteLink_val = build_siteLink_val();

І наступний код у вашій текстовій області читатиме зараз:

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

Це припускає, що ваша установка PHP налаштована на виклики змінної короткої сторони, як видно із скорочених тегів "<? =?>". Якщо ви не можете вивести цей спосіб, не забудьте заздалегідь скласти PHP-код "<? Php" і закрити "?>".

Уникайте розривів рядків між <textarea> ', оскільки це може створити потенцію помилкових символів.

Також перевірте свій CSS, щоб переконатися, що не існує правила прокладки, що просуває текст всередину.

Крім того, ви визначаєте значення col та рядків на textarea, а потім стилі ширини та висоти. Ці правила є контрпродуктивними і спричинять непослідовність візуальних зображень. Дотримуйтесь або визначаючи розмір за стилем (я рекомендую надати елементу клас), або рядками / cols.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.