Почему текстовая область заполнена таинственными пробелами?

176

У меня есть простая текстовая область в форме, подобной этой:

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

Я продолжаю получать лишнее пространство в этой textarea. Когда я вставляю в него мой курсор, как в середине textarea, а не в начале? Какое объяснение?

Теги:
forms
textarea

20 ответов

310
Лучший ответ

Посмотрите внимательно на свой код. В нем уже есть три разрыва строки и тонна пробела перед </textarea>. Сначала удалите их, чтобы больше не было разрывов строк между тегами. Возможно, это уже трюк.

  • 3
    @ user79685 пожалуйста. Прочитайте мой новый комментарий выше, я не высмеивал вас. По крайней мере, в плохом смысле :)
  • 6
    Я не согласен с этим. Я очень люблю тактику и этикет в онлайн-дискуссиях, и мне нравится в целом очень дружелюбный тон на SO. С другой стороны, при движении по сети нужно немного придумывать кожу, это правда.
Показать ещё 14 комментариев
45

Ну, все между <textarea> и </textarea> используется как значение по умолчанию для вашего поля textarea. В вашем примере есть пробелы. Попытайтесь устранить все это.

  • 3
    большое спасибо. Я не понимал, что все между ними по умолчанию. Я выбрал парня сверху, потому что он ответил на него первым, хотя и высмеял меня. Спасибо, что торчали за людей.
  • 0
    Это просто. Большое спасибо!
37

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

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php
  if($siteLink_val) echo $siteLink_val;
?></textarea>
  • 3
    это умный способ сохранить отступ в этих случаях. Спасибо!
  • 0
    Это наконец исправило мою проблему. Большое спасибо, Барт
22

В основном это должно быть

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

Если есть некоторые предопределенные пробелы, скажем, из-за форматирования кода, как показано ниже

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

Пространства, показанные точками, продолжают добавляться к каждой отправке.

  • 0
    Это старый «трюк», даже порой забытый. У нас уже были проблемы с HTML, связанные с этим, возвращаясь к IE6 / 7 .. +1
  • 0
    Спас мой день. Спасибо!
16

Вкратце: <textarea> должен быть немедленно закрыт в той же строке, где он начинался.


Общая практика: это приведет к разрыву строк и пробелов, используемых для отступов в коде.

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

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

<textarea id="sitelink" name="sitelink"></textarea>
  • 0
    Решил мою проблему.
  • 0
    Это было идеальное решение и для меня
5

Другая работа вокруг будет заключаться в использовании javascript:

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

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

Это то, что я сделал. Удаление пробелов и разрывов строк в коде делает линию слишком длинной.

  • 0
    Просто. Спасибо!
3

Любое пространство между тегами открытия и закрытия textarea будет считаться пробелом. Итак, для вашего вышеуказанного кода правильный путь будет:

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

Чтобы сделать его немного более чистым, рассмотрите использование тернарного оператора:

<textarea><?=( $siteLink_val ? $siteLink_val : '' );?></textarea>
  • 2
    Не используйте короткие теги, не предлагайте другим делать это. Это поможет людям избежать PITA при установке какого-либо веб-приложения на рабочий сервер с другим конфигом. Спасибо.
  • 4
    Я всегда использую короткие теги в шаблонных сценариях именно потому, что хочу, чтобы их использовали все больше людей, и, таким образом, поощряю сообщество PHP продолжать их поддерживать. Тем не менее, короткие теги должны использоваться ТОЛЬКО в шаблонных сценариях, НИКОГДА в логике приложения и, совершенно очевидно, ТОЛЬКО, когда их поддерживает сервер. Всегда знайте свою производственную среду перед развертыванием. (Естественно, это не место для обсуждения плюсов и минусов коротких тегов, но вы подняли этот вопрос, так что это мое оправдание.)
2

Пожалуйста, убедитесь, что после этого не происходит разбиения строк или пробела, чтобы убедиться, что нет пробелов или вкладок, просто скопируйте и вставьте этот код:) Я исправил его для вас

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

Я знаю его поздно, но могу помочь другим.

используйте это, когда требуется отступ документа.

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

тот же вопрос

  • 0
    Или вы можете правильно отформатировать HTML. Но я согласен, что это может быть сложно, если вы хотите что-то вроде php-кода внутри него. Поэтому я согласен с вашим ответом.
1
<textarea style="width:350px; 
 height:80px;" cols="42" rows="5" name="sitelink"
 ><?php if($siteLink_val) echo $siteLink_val; ?></textarea> 

Перемещение... > вниз работает для меня.

1

Одним из решений, которое сработало для меня, является добавление стиля white-space: normal; в текстовое поле, потому что иногда невозможно исключить все пробелы (например, если вы хотите, чтобы ваш код соответствовал вашим правилам кодирования, которые требуют добавления вкладок, пробелы и разрывы строк)

Обратите внимание, что по умолчанию для textarea, по крайней мере, в хром: white-space: pre-wrap;

  • 0
    Это больше не работает :(
1

В области текста отображаются таинственные пробелы, поскольку в тегах существует реальное пространство. <textarea> <php? echo $var; ?> </textarea> после удаления этих лишних пробелов между тегами будет решена проблема, как показано ниже. <textarea><php? echo $var; ?></textarea>

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
    Почти ... это все еще включает в себя две новые строки.
  • 0
    Следует использовать <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php and ?></textarea> чтобы убедиться, что он действительно чистый. Кроме того, могу ли я спросить, почему вы против HTML с PHP?
0

Если вы все еще хотите использовать отступы, сделайте это после открытия тега <?php, например:

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

сохранить код textarea без дополнительных пробелов внутри

Кроме того, если вы видите дополнительные пустые строки в метаязыке есть решение:

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

он будет печатать строки без дополнительных пустых строк конечно, это зависит от того, будут ли ваши строки заканчиваться на "\n", "\ r\n" или "" - пожалуйста, адаптируйте

0

Кроме того: тег textarea показывает пробелы для новых строк, вкладок и т.д. в многострочном коде.

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, чтобы убедиться, что нет правила заполнения, вставляющего текст внутрь.

Кроме того, вы указываете значение cols и rows в текстовом поле, а затем задаете ширину и высоту. Эти правила являются контрпродуктивными и приведут к непоследовательным визуальным эффектам. Придерживайтесь либо определения размера по стилю (я рекомендую дать элемент классу), либо строки/столбцы.

0

Кроме того, когда вы говорите, что курсор находится в "середине" текстового поля, это заставляет меня думать, что вы также можете иметь дополнительное дополнение или text-align: center, определенную где-то в вашем CSS.

-4

Элемент Html может быть открыт и теги тегов

<textarea>
...Your code
</textarea>

если вы хотите использовать один тег, используя <tagName/>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню